update:
Vim 8.1 自带的 TermDebug 插件 完美替代了本文中的 Conque-GDB
TermDebug 跟 gdb-dashboard 的结合方法跟本文类似(虽然感觉要多一块屏幕 233)
本文只介绍两个插件怎么结合
至于插件本身的用法,自行RTFM
Conque-GDB
一开始我是用Conque-GDB的
- 优点:和vim结合得很好,能直接用vim浏览代码,并发送指令给gdb
- 缺点:是没有实时显示信息的窗口
(PS:这个插件的官网已经更新到了0.16
然而官方github并没有跟上,还停留在0.14
所以我自行fork并更新到了0.16,传送门:我的github)
gdb-dashboard
然后wdc向我推荐了gdb-dashboard
它仅仅是个gdbinit文件
- 优点:可以实时显示信息,且自定义性强
- 缺点:不能和vim结合起来
结合
作为一个连浏览器都装了vim插件的vim重度患者
一番尝试之后,成功地把他们结合了起来
问题
直接生硬地装上这两个插件之后,会有兼容性问题
因为gdb-dashboard会把信息输出给Conque-GDB的窗口
而Conque-GDB又会捕获并处理窗口的输入
结果就是很卡+各种灵异
解决方法
原理
幸好,gdb-dashboard有个功能是把信息输出到其他终端
再配合可以分屏的终端,不就完美了吗?
配置
首先把gdb-dashboard的那个
.gdbinit文件改名为
.gdb-dashboard
先上这一段gdb配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# gdb-dashboard define sd source ~/.gdb-dashboard dashboard -output /dev/pts/$arg0 dashboard -layout assembly history expressions stack dashboard -style style_low '1;35' dashboard -style style_selected_1 '1;34' b main r end define dw dashboard expressions watch $arg0 end |
再配合这一段vim配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
func! MyDebug() if &filetype == 'cpp' exe "!rm -rf %<" exe "w" exe "!g++ -std=c++11 -Wall -Wno-unused-result % -g -o %<" exe "ConqueGdb %<" elseif &filetype == 'c' exe "!rm -rf %<" exe "w" exe "!gcc % -g -o %<" exe "ConqueGdb %<" endif endfunc nnoremap <F7> :call MyDebug()<CR> |
再来个可以分屏的终端,比如terminator
成果
于是,在vim里编辑完代码时
首先按
<F7>调用Conque-GDB
然后按
<Ctrl+Shift+e>垂直分屏
在新的分屏里执行命令
tty,假设输出是
/dev/pts/19
(如果不是以
/dev/pts开头,则要对应修改
.gdbinit文件
如果不是以
19结尾,则要对应修改下面这条命令
在Conque-GDB的窗口里执行
sd 19
搞掂~
安装
可以自行安装这两个插件,然后按照上面的介绍自行结合
也可以直接按照下面这篇文章走