在文章在vim中使用gdb调试 – vimgdb中我介绍了如何使用vimgdb补丁在vim/gvim中调试程序。后来陆续有一些读者反馈了他们在使用中遇到的问题。在本文中总结一下。
[ 问题一: 运行GDB命令时提示”unable to read from GDB pseudo tty”? ]
有读者在试图执行GDB命令时,出现上面的提示。
出现这个问题是由于没有正确设置gdbprg变量。使用下面的命令设置一下GDB程序的位置即可解决此问题:
:set gdbprg=/path/to/gdb
请把上面的/path/to/gdb替换成你计算机中GDB程序所在的路径。你可以把这句话加到你的vimrc中,这样每次启动vi时会自动设置此变量。
[ 问题二: 提示”GDB busy: command discarded, please try again”? ]
当你的程序需要用scanf()或者getchar()这类函数读取用户输入时,你可能会看到过这样的提示:
GDB busy: command discarded, please try again
出现这个提示,说明你的GDB正在等待用户输入,所以无法响应你所输入的其它GDB命令。
在使用vimgdb时,如果你的程序需要读取用户输入,你必须通过GDB的tty命令或run来重定向程序的标准输入。
首先,你打开一个终端(可以是xterm/rxvt/urxvt/putty/…),在此终端内输入命令tty:
$ tty /dev/pts/17
这条命令用来显示此终端所使用的设备文件名。获得了这个设备文件名后,你就可以重定向程序的标准输入输出到这个终端,在GDB中输入下面的命令:
tty /dev/pts/17
执行完这条命令后,程序的标准输入/输出就被重定向到/dev/pts/17了,这样,当执行到scanf()或getchar()函数时,切换到那个终端输入指定参数,然后回车,程序就会继续向下执行。
[ 问题三: vimgdb可以在windows下使用吗? ]
vimgdb不能在windows下使用。不过你可以用作者提供的Clewn或Pyclewn。这两个程序可以在Windows的Vim/Gvim中使用。
这里有我写的一篇关于pyclewn的教程:在VIM中使用GDB调试 – pyclewn,clewn的用法与之类似。
[ 问题四: 按空格后vimgdb的命令窗口没有弹出来? ]
首先确保vimgdb的按键定义文件存在。执行下面的命令:
:set runtimepath?
检查这条命令所列出的所有目录,如果任一目录中包含macros/gdb_mappings.vim文件,说明你的按键映射文件已经存在。如果你没有找到该文件,到vimgdb目录中找到这个命令,拷贝到上述任意一个目录中。
接下来用下面的命令加载vimgdb的键绑定:
:run macros/gdb_mappings.vim
现在,你应该可以使用vimgdb所定义的快捷键了。
[参考文档]
在GDB中输入下面的命令:
tty /dev/pts/17
这个怎么输入??我在另一个终端中输入tty /dev/pts/17
还是显示GDB busy: command discarded, please try again
谢谢
我也试了好几个小时,也是窗口弹不出来,确认文件是有的,用call gdb(“”),窗口可以弹出,但按键不行,应该是键绑定不行,但愣是查不出来为什么,run命令也没有返回错误,source命令也不行。vim和vimgdb都是7.3版本的,ubuntu和redhat都不行,有哪位仁兄用这个版本可以的,请告诉我一下,非常感谢
@libin, 我只在vim7.2中试过,你看看vimgdb的patch说明,看它是基于7.2还是7.3的。你也可以试用一下pyclewn,它的适用性更广泛。
问题很严重啊!在Ubuntu中用不了啊!
在Fedora、Red Hat、Ubuntu上都成功编译了打了vimgdb补丁的vim源代码。
在Fedora、Red Hat能够正常地在vim中使用gdb。但是,在Ubuntu中,一旦在底行键入“:run macros/gdb_mappings.vim”,vim立刻崩溃。整个终端变成一大片乱码,最后显示如下两行:
@叶剑飞, 你可以把这个问题反应给vimgdb的作者,或者试用一下pyclewn,在我的博客中有介绍。
@Easwy,
pyclewn好像不能用于终端的vim,只能用于gVim吧!可是我喜欢终端的vim,不喜欢gVim。我一般不用GUI的(因为在Linux中GUI好像搞得不太好,至少没有Windows的好),所以不用gVim,因此还是希望用vimgdb
请问用vimgdb调试是怎样输入数据(即cin<<n)?
@TL,
建议重定向标准输入到文件,例如 run < input.txt
@Stayp
使用:version命令,检查一下feature列表里有没有”+gdb”。
如果没有,说明你运行的vim中没有打vimgdb补丁,那么你要确认一下你所编译出来的vim放在哪个目录里,缺省情况下自己编译的vim应该是在 /usr/local/bin下。
@Easwy
我也碰到同样的问题了~用另一个解决方案也不行~请问是怎么回事啊?
@不知所措
你试试直接source vimgdb的mapping文件,看可不可以:
:source path/to/gdb_mappings.vim
我照着做了5个小时,空格怎么也出不来命令窗口,而且vimgdb的按键文件
确实存在,我就想不通了,怎么别人就可以??????
解决一大惑啊 非常感谢您的回答!
@yorker
:help cursorline
:help cursorcolumn
您好,问下关于VIM 列对齐的问题 特别是写python是列对齐很重要
不知这个
code_complete 那个效果
http://files.myopera.com/mbbill/files/code_complete.gif
里面到后部分演示有一个 不同行相同列时 可以 高亮显示相同列的信息 不知您是否知道怎么实现的? 谢谢