Branch | Status | Description |
---|---|---|
master | Modern version implemented as a remote Python plugin | |
moonscript | Experimental version implemented in Moonscript and some VimL | |
legacy | The original version mostly in VimL and some Python |
Gdb, LLDB, pdb/pdb++ and BASHDB integration with NeoVim.
Taken from the neovim: neovim_gdb.vim
It is instantly usable: type <leader>dd
, edit GDB launching command, hit <cr>
.
Or type <leader>dl
to do the same with LLDB backend.
Or type <leader>dp
to start debugging a python program.
Or type <leader>db
to start debugging a BASH script.
Check the prerequisites in the script test/prerequisites.sh.
If you use vim-plug, add the following line to your vimrc file for the mainstream version:
Plug 'sakhnik/nvim-gdb', { 'do': ':!./install.sh \| UpdateRemotePlugins' }
or for the original VimL version:
Plug 'sakhnik/nvim-gdb', { 'branch': 'legacy' }
You can use any other plugin manager too:
- vundle
- neobundle
- pathogen
To disable the plugin
let g:loaded_nvimgdb = 1
The behaviour of the plugin can be tuned by defining specific variables. For instance, you could overload some command keymaps:
" We're going to define single-letter keymaps, so don't try to define them
" in the terminal window. The debugger CLI should continue accepting text commands.
function! NvimGdbNoTKeymaps()
tnoremap <silent> <buffer> <esc> <c-\><c-n>
endfunction
let g:nvimgdb_config_override = {
\ 'key_next': 'n',
\ 'key_step': 's',
\ 'key_finish': 'f',
\ 'key_continue': 'c',
\ 'key_until': 'u',
\ 'key_breakpoint': 'b',
\ 'set_tkeymaps': "NvimGdbNoTKeymaps",
\ }
Likewise, you could define your own hooks to be called when the source window
is entered and left. Please refer to the online NeoVim help: :help nvimgdb
.
See :help nvimgdb
for the complete online documentation. Most notable commands:
Mapping | Command | Description |
---|---|---|
<Leader>dd | :GdbStart gdb -q ./a.out |
Start debugging session, allows editing the launching command |
<Leader>dl | :GdbStartLLDB lldb ./a.out |
Start debugging session, allows editing the launching command |
<Leader>dp | :GdbStartPDB python -m pdb main.py |
Start Python debugging session, allows editing the launching command |
<Leader>db | :GdbStartBashDB bashdb main.sh |
Start BASH debugging session, allows editing the launching command |
<F8> | :GdbBreakpointToggle |
Toggle breakpoint in the coursor line |
<F4> | :GdbUntil |
Continue execution until a given line (until in gdb) |
<F5> | :GdbContinue |
Continue execution (continue in gdb) |
<F10> | :GdbNext |
Step over the next statement (next in gdb) |
<F11> | :GdbStep |
Step into the next statement (step in gdb) |
<F12> | :GdbFinish |
Step out the current frame (finish in gdb) |
<c-p> | :GdbFrameUp |
Navigate one frame up (up in gdb) |
<c-n> | :GdbFrameDown |
Navigate one frame down (down in gdb) |
You can create a watch window evaluating a backend command on every step.
Try :GdbCreateWatch info locals
in GDB, for istance.
The goal is to have a thin wrapper around GDB, LLDB, pdb/pdb++ and BASHDB, just like the official TUI. NeoVim will enhance debugging with syntax highlighting and source code navigation.
- Porting to Moonscript: 2018-11-17
- Overview to the first anniversary: 2018-08-10