*lldb.txt* A plugin that enables debugging from your favourite editor

Author:   Daniel Malea <daniel.malea@intel.com>
License:  Same terms as Vim itself (see |license|)

INTRODUCTION                                    *lldb*

Installing this plugin enables a set of commands in Vim to control the
LLDB (http://lldb.llvm.org) debugger.

COMMANDS                                        *lldb-commands*

The LLDB command interpreter is exposed to Vim's command mode using the
':L' prefix. Tab-completion is available and will cycle through commands.
Some commands have modified behaviour in Vim; for example, :Lbreakpoint
with no arguments will set a breakpoint at the current cursor, rather than
printing the standard help information for the LLDB command 'breakpoint'.

                                                *lldb-windows*

In addition to the standard commands available under the LLDB interpreter,
there are also commands to display or hide informational debugger panes.

Windows can be shown or hidden using the ':Lhide <name>' or ':Lshow <name>'
commands.
                                                *lldb-:Lhide*
:Lhide [windowname]     Hide informational debugger pane named 'windowname'. 

                                                *lldb-:Lshow*
:Lshow [windowname]     Show informational debugger pane named 'windowname'. 

Possible window name arguments to the Lhide and Lshow commands include:

    * backtrace
    * breakpoints
    * disassembly
    * locals
    * registers
    * threads
                                                *lldb-:Lattach*
:Lattach <process-name> Attach to a process by name.

                                                *lldb-:Ldetach*
:Ldetach                Detach from the current process.

                                                *lldb-:Ltarget*
:Ltarget [[create] executable]
                        Create a target with the specified executable. If
                        run with a single argument, that argument is assumed
                        to be a path to the executable to be debugged.
                        Otherwise, all arguments are passed into LLDB's command
                        interpreter.

                                                *lldb-:Lstart*
:Lstart                 Create a process by executing the current target
                        and wait for LLDB to attach.

                                                *lldb-:Lrun*
:Lrun                   Create a process by executing the current target
                        without waiting for LLDB to attach.

                                                *lldb-:Lcontinue*
:Lcontinue              Continue execution of the process until the next
                        breakpoint is hit or the process exits.

                                                *lldb-:Lthread*
:Lthread <args>         Passes through to LLDB. See :Lhelp thread. 

                                                *lldb-:Lstep*
:Lstep                  Step into the current function call.

                                                *lldb-:Lstepin*
:Lstepin                Step into the current function call.

                                                *lldb-:Lstepinst*
:Lstepinst              Step one instruction.

                                                *lldb-:Lstepinstover*
:Lstepinstover          Step one instruction, but skip over jump or call
                        instructions.

                                                *lldb-:Lnext*
:Lnext                  Step to the next line.

                                                *lldb-:Lfinish*
:Lfinish                Step out of the current function.

                                                *lldb-:Lbreakpoint*
:Lbreakpoint [args]     When arguments are provided, the lldb breakpoint
                        command is invoked. If no arguments are provided,
                        a breakpoint at the location under the cursor.

                                                *lldb-:Lprint*
                                                *lldb-:Lpo*
                                                *lldb-:LpO*
:Lprint <expr>          Aliases to the lldb print and po commands. Cursor
:Lpo <expr>             word (cursor WORD for LpO) will be used when 
:LpO <expr>             expression omitted.

MAPPINGS                                        *lldb-mappings*

On Mac OS X (under MacVim) , the following key mappings are available:

<Command-B>             Insert a breakpoint at the line under cursor


ABOUT                                           *lldb-about*

Grab the latest version of this plugin (and LLDB sources) with:
  git clone http://llvm.org/git/lldb

File any bugs at:
  http://llvm.org/bugs/enter_bug.cgi?product=lldb

 vim:tw=78:et:ft=help:norl:
