262 lines
6.8 KiB
Text
262 lines
6.8 KiB
Text
|
|
*vim-java-debug.html*
|
||
|
|
|
||
|
|
Java Debugging
|
||
|
|
**************
|
||
|
|
|
||
|
|
*:JavaDebugStart*
|
||
|
|
|
||
|
|
|
||
|
|
Starting a debug session
|
||
|
|
=========================
|
||
|
|
|
||
|
|
Before starting a debug session from vim you first need to do a couple
|
||
|
|
things:
|
||
|
|
|
||
|
|
1. Start your java program with the debugging hooks enabled:
|
||
|
|
>
|
||
|
|
|
||
|
|
$ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044 \
|
||
|
|
-classpath ./bin org.test.debug.Main
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
2. Start vim with the --servername argument (eclimd currently sends
|
||
|
|
debugger updates to vim using vim's remote invocation support):
|
||
|
|
>
|
||
|
|
|
||
|
|
$ vim --servername debug ...
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
Note: The server name you choose doesn't matter as long as you don't
|
||
|
|
have another vim instance running with that same name.
|
||
|
|
|
||
|
|
Once you've got your java program running and vim started with a
|
||
|
|
servername, you can then start your debug session using the
|
||
|
|
:JavaDebugStart command. This command requires the hostname/IP and the
|
||
|
|
port number on which the debug server is running.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugStart localhost 1044
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugBreakpointToggle*
|
||
|
|
|
||
|
|
|
||
|
|
Add/Remove a breakpoint
|
||
|
|
=======================
|
||
|
|
|
||
|
|
To add a breakpoint, simply open the file, position the cursor on the
|
||
|
|
desired line and run the :JavaDebugBreakpointToggle command. If now
|
||
|
|
breakpoint exists, one will be created. If a breakpoint does exist,
|
||
|
|
then :JavaDebugBreakpointToggle will toggle whether that breakpoint is
|
||
|
|
enabled or not. If you'd like to delete the breakpoint on the current
|
||
|
|
line instead of disabling it, then run the toggle command with the !
|
||
|
|
option.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
" create a breakpoint or toggle whether the current breakpoint is
|
||
|
|
" enabled/disabled
|
||
|
|
:JavaDebugBreakpointToggle
|
||
|
|
|
||
|
|
" same as the above, but instead disabling an enabled breakpoint,
|
||
|
|
" delete it instead.
|
||
|
|
:JavaDebugBreakpointToggle!
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugBreakpointsList*
|
||
|
|
|
||
|
|
|
||
|
|
Listing your breakpoints
|
||
|
|
========================
|
||
|
|
|
||
|
|
To view a list of all your breakpoints you can use the
|
||
|
|
:JavaDebugBreakpointsList command, which by default will list all
|
||
|
|
breakpoints for the current file, or with the ! suffix, it will list
|
||
|
|
all breakpoints for the current project and all project dependencies.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugBreakpointsList
|
||
|
|
:JavaDebugBreakpointsList!
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
This will open a new window which displays your breakpoints grouped by
|
||
|
|
file or by project and file.
|
||
|
|
|
||
|
|
Mappings
|
||
|
|
|
||
|
|
- <cr> - Jump to the file and line of the breakpoint under the
|
||
|
|
cursor
|
||
|
|
- T - Toggles the breakpoint under the cursor, or all breakpoints
|
||
|
|
under the file or project when used on the class name or project
|
||
|
|
name.
|
||
|
|
- D - Deletes the breakpoint under the cursor, or all breakpoints
|
||
|
|
under the file or project when used on the class name or project
|
||
|
|
name.
|
||
|
|
*:JavaDebugBreakpointRemove*
|
||
|
|
|
||
|
|
|
||
|
|
Remove breakpoints
|
||
|
|
==================
|
||
|
|
|
||
|
|
In addition to using the delete mapping provided in the
|
||
|
|
|:JavaDebugBreakpointsList| window, you can also remove all
|
||
|
|
breakpoints in the current file using the :JavaDebugBreakpointRemove
|
||
|
|
command, or with the ! suffix, you can remove all breakpoints in the
|
||
|
|
current project.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugBreakpointRemove
|
||
|
|
:JavaDebugBreakpointRemove!
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugStep*
|
||
|
|
|
||
|
|
|
||
|
|
Step Through the Code
|
||
|
|
=====================
|
||
|
|
|
||
|
|
There are 3 ways to step through code using the :JavaDebugStep command
|
||
|
|
and an action argument.
|
||
|
|
|
||
|
|
- over: Step over current line
|
||
|
|
- into: Step into a function
|
||
|
|
- return: Return from current function
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugStep over
|
||
|
|
:JavaDebugStep into
|
||
|
|
:JavaDebugStep return
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugStatus*
|
||
|
|
|
||
|
|
|
||
|
|
Status
|
||
|
|
======
|
||
|
|
|
||
|
|
When a debugging session is started, a status window is automatically
|
||
|
|
opened at the bottom in a horizontal split window. It has 2 panes:
|
||
|
|
|
||
|
|
- Debug Threads: The left pane shows active threads along with its
|
||
|
|
stack frames.
|
||
|
|
Mappings
|
||
|
|
|
||
|
|
- s - Suspend the thread under the cursor.
|
||
|
|
- S - Suspend all threads.
|
||
|
|
- r - Resume the thread under the cursor.
|
||
|
|
- R - Resume all threads.
|
||
|
|
- B - Open the breakpoints window showing all breakpoints for this
|
||
|
|
project and dependencies.
|
||
|
|
- Debug Variables: The right pane shows the variables available for
|
||
|
|
the thread selected on the left pane. Variables can be seen only for
|
||
|
|
suspended threads. If there are suspended threads, then one of them
|
||
|
|
is automatically selected and its variables displayed.
|
||
|
|
Mappings
|
||
|
|
|
||
|
|
- <cr> - Expands the variable. Nested variables are shown in a
|
||
|
|
tree like structure. To collapse the variable, press <CR> again.
|
||
|
|
- p - Displays the toString value of the variable under cursor.
|
||
|
|
This is equivalent to the Details pane in Eclipse.
|
||
|
|
- B - Open the breakpoints window showing all breakpoints for this
|
||
|
|
project and dependencies.
|
||
|
|
If for some reason, the status window is not updated, or you
|
||
|
|
accidentally closed it, you can manually refresh it by running
|
||
|
|
:JavaDebugStatus command.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugStatus
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugStop*
|
||
|
|
|
||
|
|
|
||
|
|
Suspend / Resume
|
||
|
|
================
|
||
|
|
|
||
|
|
In addition to using the mappings provided in the |:JavaDebugStatus|
|
||
|
|
threads window, you can also suspend and resume threads using the
|
||
|
|
following commands:
|
||
|
|
|
||
|
|
- To suspend the entire debugging session (all threads), run
|
||
|
|
:JavaDebugThreadSuspendAll from any window.
|
||
|
|
- To resume the entire debugging session (all threads), run
|
||
|
|
:JavaDebugThreadResumeAll from any window.
|
||
|
|
|
||
|
|
Stop
|
||
|
|
====
|
||
|
|
|
||
|
|
To stop a debug session, you can use the :JavaDebugStop command.
|
||
|
|
|
||
|
|
>
|
||
|
|
|
||
|
|
:JavaDebugStop
|
||
|
|
|
||
|
|
<
|
||
|
|
|
||
|
|
|
||
|
|
*:JavaDebugThreadSuspendAll* *:JavaDebugThreadResume*
|
||
|
|
*:JavaDebugThreadResumeAll*
|
||
|
|
|
||
|
|
|
||
|
|
Configuration
|
||
|
|
=============
|
||
|
|
|
||
|
|
*g:EclimJavaDebugLineHighlight*
|
||
|
|
|
||
|
|
- g:EclimJavaDebugLineHighlight (Default: 'DebugBreak') Highlight
|
||
|
|
group to use for showing the current line being debugged.
|
||
|
|
*g:EclimJavaDebugLineSignText*
|
||
|
|
|
||
|
|
- g:EclimJavaDebugLineSignText (Default: '•') Text to use on sign
|
||
|
|
column for showing the current line being debugged.
|
||
|
|
*g:EclimJavaDebugStatusWinOrientation*
|
||
|
|
|
||
|
|
- g:EclimJavaDebugStatusWinOrientation (Default: 'vertical') Sets
|
||
|
|
the orientation for the splits inside the debug status windows; if
|
||
|
|
they should be tiled vertically or horizontally. Possible values: -
|
||
|
|
horizontal - vertical
|
||
|
|
*g:EclimJavaDebugStatusWinWidth*
|
||
|
|
|
||
|
|
- g:EclimJavaDebugStatusWinWidth (Default: 50) Sets the window width
|
||
|
|
for the splits inside the debug status window. This is only
|
||
|
|
applicable when the orientation is horizontal.
|
||
|
|
*g:EclimJavaDebugStatusWinHeight*
|
||
|
|
|
||
|
|
- g:EclimJavaDebugStatusWinHeight (Default: 10) Sets the window
|
||
|
|
height for the splits inside the debug status window. This is only
|
||
|
|
applicable when the orientation is vertical.
|
||
|
|
|
||
|
|
Troubleshooting
|
||
|
|
===============
|
||
|
|
|
||
|
|
- Expanding a variable shows an empty line with just a dot. You
|
||
|
|
probably haven't pressed the <Enter> key on the variable. Nested
|
||
|
|
variables are retreived one level at a time from the server to be
|
||
|
|
performant. Since we are using VIM folds, any mapping that simply
|
||
|
|
opens a fold will not cause variables to be retrieved.
|
||
|
|
- A split window is created when stepping into a function
|
||
|
|
(JavaDebugStep into) from the debug status window. It is not clear
|
||
|
|
why this is happening. To avoid this problem, run step into command
|
||
|
|
outside the debug status window.
|
||
|
|
|
||
|
|
vim:ft=eclimhelp
|