zoukankan      html  css  js  c++  java
  • [转]vi/vim使用进阶: 在VIM中使用GDB调试 – 使用pyclewn

    转自http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/

    ===================================================

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

    :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

    [参考文档]

  • 相关阅读:
    mysql 存储引擎
    mysql优化的理解(转载)
    转载:字节流与字符流的理解
    转载:java面试题(二)
    androidstudio与unity进行交互
    偶尔出现button不能点击的情况
    R文件报错:cannot resolve symbol ‘R’
    有时候老师报空错误,但是输出和在面板上看是得到了实例的
    边缘与多边形碰撞盒不能编辑的原因
    编程内功修炼
  • 原文地址:https://www.cnblogs.com/peteryj/p/2818838.html
Copyright © 2011-2022 走看看