10

<< 返回vim使用进阶: 目录

本节所用命令的帮助入口:

:help pyclewn 

在前面的文章中介绍了使用vimgdb在vim中调试程序,这种方法允许在终端中的vim,以及图形化的gvim中调试你的程序。不过它的局限也是很明显的:首先,它需要给vim的源代码打补丁并重新编译vim;另外,它只能在Linux下使用,不能在windows上进行gdb调试。

要想在vim中调试,除了使用vimgdb外,还可以使用clewn和pyclewn,这两个工具也是vimgdb的作者提供的,用法基本相同。区别在于,clewn是使用C语言编写的,而pyclewn是使用python语言编写的,具有更好的跨平台能力。本文主要介绍pyclewn工具。

使用pyclewn需要计算机上安装有python 2.4(或以上版本)以及gvim 7.0或以上版本。需注意的是,pyclewn只能与gvim配合使用,它不支持终端中的vim(clewn也是如此) (update 2011/12/27: 在vim 7.3中,最新的pyclew已经支持终端中的vim调试)。另外,gvim在编译时需要使能netbeans_intg特性和autocmd特性。

如果上面的条件都已经满足,到http://sourceforge.net/projects/pyclewn/下载pyclewn,下载后解压准备安装。安装pyclewn很简单,在我的计算机上,gvim安装目录在我的HOME目录,因此,也把pyclewn安装在HOME目录,使用如下命令:

cd /home/easwy/download/pyclewn-0.7/
vimdir=$HOME/.vim python setup.py install --home=$HOME 

在pyclewn的源码目录中有一个名为INSTALL的文件,介绍了如何在UNIX以及windows上安装pyclewn,你可以根据自己的环境决定如何安装pyclewn。

安装完pyclewn后,启动gvim,执行:help pyclewn命令,就可以看到pyclewn的帮助文件,里面有很多有用的信息。

下面通过一个例子讲解一下如何使用pyclewn进行调试。例子中所调试的程序在这里下载:调试程序下载

首先启动pyclewn。启动pyclewn的办法很简单,在一个终端中执行下面的命令就可以了:

pyclewn 

pyclewn启动时,它会启动一个gvim窗口,我们的调试将在这个gvim窗口中进行。运行pyclewn的终端将做为gdb的控制终端,所调试程序的输入输出都会通过这个终端进行(当然,你也可以在gdb中通过tty命令更改控制终端)。

接下来,我们在pyclewn所打开的gvim窗口中输入下面的命令,编译该程序,打开要调试的文件,并在文件中设置断点:

:cd pyclewn-ex
:make
:e main.c
:Cfile factorial
:Cbreak 14 

前面三条命令是标准的vim命令,切换到示例程序所在目录,编译该程序,并打开文件main.c。后面两条命令以大写字母C做为起始,这是pyclewn自定义的命令,pyclewn将会把字母C后的命令内容传递给GDB调试器。所以上面两条命令相当于在GDB中执行file factorbreak 14,加载factor做为被调试的程序,并在main.c的第14行设置一个断点。

在执行pyclewn自定义的C命令时,pyclewn会在gvim中分隔出一个窗口,用于显示GDB调试器的输入输出。所以,执行完上面命令后,屏幕看起来是这样的:

在上面已经设置好断点了,现在就可以开始调试了。pyclewn已经定义了一些调试相关的键映射,我们可以通过下面的命令加载这些键映射:

:Cmapkeys 

执行完这条命令,会在clewn_console中打印出所定义的键映射,我在此不再赘述。在下面的调试过程中,我也会使用几个最常用的映射。

我们继续调试。我在上面已经定义了一个断点,所以直接按SHIFT-R键运行程序。程序运行到断点后会停下来,然后我们连按三次CTRL-N,执行三条语句,现在切换到控制终端,可以看到程序在等待输入,我们输入一个数字,然后按回车。现在看到的屏幕是这样的:

在上面的抓图中,我们把鼠标移动到变量n上,可以看到弹出了一个小气泡,显示变量n的值为4,这和我们输入的数字是一致的。

接下来再按一次CTRL-N向下执行一个语句,然后再按SHIFT-S步进到函数factorial()中,现在gvim会打开文件util/factorial.c。然后用下面的命令,把变量t和i加入到watch窗口中:

:Cdbgvar t
:Cdbgvar i 

上面的命令会创建一个名为(clewn)_dbgvar的缓冲区,不过此缓冲区并未显示出来。用下面的命令可以新建一个窗口显示此缓冲区:

:sb (clewn)_dbgvar 

现在屏幕看起来是这样的:

按一次SHIFT-C使程序运行至结束,我们的调试也就告一段落了。

从上面的调试过程可以看出,使用pyclewn调试很方便。而且,使用pyclewn也可以在windows上进行调试,不过我没有试过,有兴趣的朋友可以试一下。在windows上调试,可能需要使用cygwin中所带的gdb。

如果觉得pyclewn缺省所设置的键映射不能满足自己的需求,也可以自己定义更多GDB调试键映射,方法是把pyclewn发行目录中的.clewn_keys.gdb拷贝到你的HOME目录,然后修改此文件定制自己的键绑定即可。

cd /home/easwy/download/pyclewn-0.7/
cp runtime/.clewn_keys.gdb $HOME 

要想了解更多关于pyclewn的使用,请阅读pyclewn的帮助手册::help pyclewn

[参考文档]

<< 返回vim使用进阶: 目录

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/

文章的脚注信息由WordPress的wp-posturl插件自动生成

开源软件, 文本处理

31条评论 添加评论

  1. yorker
    2009/10/23 22:29 | #1

    您好,看你这么多VIM介绍,我有个问题就是有没有 在本地用GVIM 对服务器(非嵌入式)的程序 进行 远程调试?这样就不用在ssh到服务器上后再用终端的VIM 进行GDB调试了。

  2. wonder
    2009/11/24 21:28 | #3

    您好,我按照你给的步骤装上了。但是不能调试。
    出现如下错误:
    Pyclewn version 0.7 starting a new instance of gdb.
    gdb busy: command discarded, please retry

  3. wonder
    2009/11/24 21:30 | #4

    我是在windows下装的

  4. 2009/11/26 22:22 | #5

    @wonder
    我还没有在windows下试过,改天有空我试一下,再发一篇文章。

  5. 2010/02/23 17:19 | #6

    [...] 参考地址: Pyclewn installation notes vi/vim使用进阶: 在VIM中使用GDB调试 – 使用pyclewn [...]

  6. rushui
    2010/02/28 21:41 | #7

    好久没来了,突然发现换主题了,呵呵。

  7. vim
    2010/04/06 18:32 | #8

    您好,在windows下,出现如下错误:“the ‘:nbstart’ vim command does not exist.”

  8. 2010/04/07 10:33 | #9

    @vim
    你要把出问题的过程描述清楚,不然我也不知道问题出在哪里

  9. Jeetson
    2010/04/11 22:20 | #10

    为什么我按照上面的过程 设置好断点后 准备运行程序 用SHIFT+R
    出现了这样的错误
    No executable file specified.
    Use the “file” or “exec-file” command.

  10. 2010/04/12 09:34 | #11

    @Jeetson
    使用gdb调试之前,需要使用gdb的file命令指定你要调试的程序。
    在pyclewn中,我文中的”:Cfile factor”就是指定要调试的程序是factor。

  11. Neo
    2010/04/27 16:53 | #12

    谢谢博主, 受益匪浅阿 :)

    不过其中有个小错误哦, sample程序编译出来的可执行文件名是factorial
    所以,在pyclewn中调入可执行文件时:

    :Cfile factor
    应该更正为:
    :Cfile factorial

  12. 2010/04/28 10:06 | #13

    @Neo
    已更正 :-)

  13. sunrise
    2010/08/06 22:57 | #14

    谢谢博主,出问题了,要先卸掉,怎么卸啊?

  14. 2010/08/07 12:37 | #15

    @sunrise
    把pyclewn键映射那个文件删掉就行了,也就是删掉~/.clewn_keys.gdb

  15. Superli
    2010/08/28 21:12 | #16

    请问pyclewn的,等快捷键和gvim的按键冲突,如按下会变成替换,应如何解决?

  16. 2010/08/29 13:29 | #17

    @Superli
    把冲突的按键重新映射一下就可以了呀,修改一下文件~/.clewn_keys.gdb

  17. 2010/11/03 18:26 | #18

    我这里还是No executable file specified. file文件名无误,vim直接用gdb可以。

    vim里file factorial显示

    factorial: \346\262\241\346\234\211\351\202\243\344\270\252\346\226\207\34

    貌似是找不到还是怎么的……

  18. 2010/11/05 14:00 | #19

    @lainme
    你在指定文件时,加上全路径试一下,比如:

    :Cfile /full/path/to/factorial

  19. 湛狼
    2010/12/01 17:18 | #20

    在windows下装不上pyclewn,老是提示

    File “”, line 36
    raise ClewnInstallError, ‘netbeans support in vim is required’
    ^
    SyntaxError: invalid syntax

    这个错误。
    我已经在系统变量加上了gvim所在路径,gvim的version信息中也支持netbeans_intg。

  20. 2010/12/03 09:20 | #21

    @湛狼
    我看了一下,windows版的vim在编译已经包含了netbeans_intg功能,是不是你的路径设置的不正确?你在命令行下执行这条命令试试:

    gvim –cmd “version” –cmd “q”

  21. gluttony
    2011/03/30 15:36 | #22

    我在windows下安装的,vim7.3+python2.7,按照LZ的文章执行到“
    :cd pyclewn-ex
    :make

    ”时,出现了:!make >c:\users\administor\AppData\Local\Temp\VIef077.tmp 2>&1
    Shell 返回 1
    (1/2): ‘make’
    的错误。网上的答案说是没有makefile,可是我看了有makefile啊

  22. gluttony
    2011/03/30 20:09 | #23

    @gluttony
    呃,这个问题解决了,是在mingw的bin目录下,没有make.exe,只有mingw32-make.exe,复制mingw32-make.exe更名为make.exe就好了。
    现在的问题是,Cfile factorial,显示factorial: No such file or directory.

  23. chenGH
    2011/07/08 10:54 | #24

    怎么使用pyclewn调试.so库文件呢?希望楼主指点

  24. 2011/07/19 10:54 | #25

    @chenGH
    在网上有一些介绍调试动态库的文章,可以参考一下,例如
    http://www.cublog.cn/u/12973/showart_212717.html

  25. vimer
    2011/08/29 15:17 | #26

    Cdbgvar在windows下面会报错,其他的没问题

  26. 2011/11/07 09:53 | #27

    博主,pyclewn支持终端vim啊

  27. cidhada
    2011/11/09 07:29 | #28

    博主,

    在linux下,出现,”the :nbstart vim command does not exist”。
    我是这样使用
    >gvim
    >Pyclewn
    就出现上面错误,如果直接>pyclewn就没问题。还有就是是不是只能用gvim不可以用vim调用pyclewn.

    如何把gdb窗口放到右边。
    有2个pyclewn.vim不知道修改哪个,怎么修改。

  28. cidhada
    2011/11/11 06:11 | #29

    @whenov
    好像一用pyclewn自动调gvim,我在vim下用Pyclewn一直说nbstart不存在。

  29. 2011/12/27 16:12 | #30

    1. 我看了一下,好像:nbstart命令是在vim 7.3版本中才有的,而vim 7.2里没有这个命令,会不会这两种方式启动的vim版本不一样?

    2. 在vim 7.3里,可以在终端的vi中使用pyclewn,在vim 7.2中不行。

    3. 把gdb窗口放在右边,大概要改pyclewn,你自己尝试一下。

  30. 2011/12/27 16:13 | #31

    我写这篇文章时用的是vim 7.2,当时不支持终端vim。在最新的vim 7.3中,已经可以在终端vim中使用pyclewn。

评论本文