*debugger.txt*  For Vim version 7.0aa.  Last change: 2005 Mar 29


		  VIM REFERENCE MANUAL    by Gordon Prieur


Debugger Support Features				*debugger-support*

1. Debugger Features		|debugger-features|
2. Vim Compile Options		|debugger-compilation|
3. Integrated Debuggers		|debugger-integration|

{Vi does not have any of these features}

==============================================================================
1. Debugger Features					*debugger-features*

The following features are available for an integration with a debugger or
an Integrated Programming Environment (IPE) or Integrated Development
Environment (IDE):

	Alternate Command Input				|alt-input|
	Debug Signs					|debug-signs|
	Debug Source Highlight				|debug-highlight|
	Message Footer					|gui-footer|
	Balloon Evaluation				|balloon-eval|

These features were added specifically for use in the Motif version of gvim.
However, the |alt-input| and |debug-highlight| were written to be usable in
both vim and gvim.  Some of the other features could be used in the non-GUI
vim with slight modifications.  However, I did not do this nor did I test the
reliability of building for vim or non Motif GUI versions.


1.1 Alternate Command Input				*alt-input*

For Vim to work with a debugger there must be at least an input connection
with a debugger or external tool.  In many cases there will also be an output
connection but this isn't absolutely necessary.

The purpose of the input connection is to let the external debugger send
commands to Vim.  The commands sent by the debugger should give the debugger
enough control to display the current debug environment and state.

The current implementation is based on the X Toolkit dispatch loop and the
XtAddInput() function call.


1.2 Debug Signs						*debug-signs*

Many debuggers mark specific lines by placing a small sign or color highlight
on the line.  The |:sign| command lets the debugger set this graphic mark.  Some
examples where this feature would be used would be a debugger showing an arrow
representing the Program Counter (PC) of the program being debugged.  Another
example would be a small stop sign for a line with a breakpoint.  These visible
highlights let the user keep track of certain parts of the state of the
debugger.

This feature can be used with more than debuggers, too.  An IPE can use a sign
to highlight build errors, searched text, or other things.  The sign feature
can also work together with the |debug-highlight| to ensure the mark is
highly visible.

Debug signs are defined and placed using the |:sign| command.


1.3 Debug Source Highlight				*debug-highlight*

This feature allows a line to have a predominant highlight.  The highlight is
intended to make a specific line stand out.  The highlight could be made to
work for both vim and gvim, whereas the debug sign is, in most cases, limited
to gvim.  The one exception to this is Sun Microsystem's dtterm.  The dtterm
from Sun has a "sign gutter" for showing signs.


1.4 Message Footer					*gui-footer*

The message footer can be used to display messages from a debugger or IPE.  It
can also be used to display menu and toolbar tips.  The footer area is at the
bottom of the GUI window, below the line used to display colon commands.

The display of the footer is controlled by the 'guioptions' letter 'F'.


1.5 Balloon Evaluation					*balloon-eval*

This feature allows a debugger, or other external tool, to display dynamic
information based on where the mouse is pointing.  The purpose of this feature
was to allow Sun's Visual WorkShop debugger to display expression evaluations.
However, the feature was implemented in as general a manner as possible and
could be used for displaying other information as well.

The Balloon Evaluation has some settable parameters too.  For Motif the font
list and colors can be set via X resources (XmNballoonEvalFontList,
XmNballoonEvalBackground, and XmNballoonEvalForeground).
The 'balloondelay' option sets the delay before an attempt is made to show a
balloon.
The 'ballooneval' option needs to be set to switch it on.

Balloon evaluation is only available when compiled with the |+balloon_eval|
feature.

The Balloon evaluation functions are also used to show a tooltip for the
toolbar.  The 'ballooneval' option does not need to be set for this.  But the
other settings apply.

Another way to use the balloon is with the 'balloonexpr' option.  This is
completely user definable.

==============================================================================
2. Vim Compile Options					*debugger-compilation*

The debugger features were added explicitly for use with Sun's Visual
WorkShop Integrated Programming Environment (ipe).  However, they were done
in as generic a manner as possible so that integration with other debuggers
could also use some or all of the tools used with Sun's ipe.

The following compile time preprocessor variables control the features:

    Alternate Command Input			ALT_X_INPUT
    Debug Glyphs				FEAT_SIGNS
    Debug Highlights				FEAT_SIGNS
    Message Footer				FEAT_FOOTER
    Balloon Evaluation				FEAT_BEVAL

The first integration with a full IPE/IDE was with Sun Visual WorkShop.  To
compile a gvim which interfaces with VWS set the following flag, which sets
all the above flags:

    Sun Visual WorkShop				FEAT_SUN_WORKSHOP

==============================================================================
3. Integrated Debuggers					*debugger-integration*

One fully integrated debugger/IPE/IDE is Sun's Visual WorkShop Integrated
Programming Environment.

For Sun NetBeans support see |netbeans|.

 vim:tw=78:sw=4:ts=8:ft=help:norl:
