当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 23 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : vim连接gdb攻略(clewn)
帖子发表于 : 2008-02-02 18:13 
头像

注册: 2007-01-25 16:43
帖子: 786
地址: 塔尔塔洛斯
送出感谢: 0 次
接收感谢: 0 次
虽然最近不经常调试C程序了,但觉得vim总应该有一个和gdb连接的方法才称得上真正的vim。
于是,前一段时间一直再找vim连接gdb的方法,结果在google上找到的全是打vimgdb补丁的,需要重新编译vim,感觉很不爽。前几天的到一个高人的启发,试了一下clewn,经过一个多小时,终于大致搞定了,用着还不错。鉴于很难找到配置clewn的资料,就把方法发上来了,想在vim里体验一下gdb而又不想编译的朋友可以试一下

废话少说,可以现跳到帖子末尾看一下效果图
把vim分成两个窗口,上半部分显示代码,下半部分显示观察变量。C-B设置断点,R是run,S是step,C-J是添加观察变量。
如果觉得有用的话继续往下看,没用请点击“后退”按钮

clewn的主页:
http://clewn.sourceforge.net/
各种步骤在其主页上都有详细说明
懒得看的往下看:

安装:
大前提:有gvim,也就是vim-gnome, 还有dgb

首先下载源代码,到他的主页上很容易找到,注意下载clewn而不是vimgdb。
解压,进入目录应该都会吧
然后是老一套
代码:
./configure
make
sudo make install

注意,安装clewn依赖readline 缺少的去新立得里搜一下,libreadline5-dev
或者直接
代码:
sudo apt-get install libreadline5-dev

安装好后把相关的.vim文件复制到~/.vim下
参考:
代码:
cp /usr/local/share/vim/vimfiles/clewn.vim ~/.vim/plugin/
cp /usr/local/share/vim/vimfiles/doc/clewn.txt ~/.vim/doc/
cp /usr/local/share/vim/vimfiles/macros/clewn_mappings.vim ~/.vim/macros/
cp /usr/local/share/vim/vimfiles/syntax/gdbvar.vim ~/.vim/syntax/

注意:以上路径仅供参考,具体参照你的路径

然后就搞定了,写一段程序测试一下:
代码:
#include  <stdio.h>

int main(int argc, char *argv[]) {
  int i;
  int s;
  s=0;
  for( i=0 ; i<10 ; ++i ) {
    s=s+1;
  }
}

随便存一个名字,例如test.c
然后:
代码:
gcc -g -o test test.c


编译通过后:
代码:
clewn -va test.c

然后你会看到终端自动打开了gdb,同时gvim也打开了。不要急,在终端(gdb)里输入:
代码:
file test

然后就可以在gvim里调试了
可以不用输入gdb命令,直接在gvim里操作很方便
例如:
用鼠标点到你想设置断点的行(用光标移也可以,不过有时设置断点的时候会不灵),按下CTRL+B,不灵的话就多按几下,就设置好断点了。
然后安SHIFT+r(就是R)就run了。当然,程序会在断点处停止
继续安SHIFT+s(就是S)就step了。
如果想看变量的话就在命令模式下输入:
代码:
:split

窗口就拆开了。
然后用鼠标点中想要观察的变量(用光标移也可以,不过有时会不灵,汗!),按下CTRL+J,就会在另一个窗口里看到变量了,而且step的时候会自动更新还会高亮显示的。不灵的话就多按几次,再不灵的话就直接在终端(gdb)里输入
代码:
createvar yourvar

其中,yourvar是你想要观察的变量。
下面是默认的快捷键:摘录自官方文档
代码:
List of default key mappings:

        CTRL-Z  send an interrupt to GDB and the program it is running
        B       info breakpoints
        L       info locals
        A       info args
        S       step
        I       stepi
        CTRL-N  next: next source line, skipping all function calls
        X       nexti
        F       finish
        R       run
        Q       quit
        C       continue
        W       where
        CTRL-U  up: go up one frame
        CTRL-D  down: go down one frame

cursor position: ~
        CTRL-B  set a breakpoint on the line where the cursor is located
        CTRL-E  clear all breakpoints on the line where the cursor is located

mouse pointer position: ~
        CTRL-P  print the value of the variable defined by the mouse pointer
                position
        CTRL-X  print the value that is referenced by the address whose
                value is that of the variable defined by the mouse pointer
                position
        CTRL-K  set a breakpoint at assembly address shown by mouse position
        CTRL-H  clear a breakpoint at assembly address shown by mouse position
        CTRL-J  add the selected variable at mouse position to the watched
                variables window

当然,你也可以自己修改你喜欢的热键,具体查看文档

好了,基本就研究出这么多,如果想更详细深入的研究的华请看clewn的官方文档:
http://clewn.sourceforge.net/doc.html


总之,希望对喜欢或准备喜欢vim的人有一定的帮助,也欢迎众高手点评批评。


附件:
screenshot3.png
screenshot3.png [ 68.44 KiB | 被浏览 12400 次 ]



_________________
我生平瞧不起两种人:
1.那些瞧不起用windows的人的人
2.用windows的人
3.不识数的人

博客:http://blog.chunhao.net
主页:http://chunhao.net
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-02 18:40 
头像

注册: 2007-02-18 19:33
帖子: 2180
地址: lyric.im
系统: OSX
送出感谢: 0 次
接收感谢: 1
好不好用,试试才知道


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-02-02 19:09 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
支持多测试。 :lol:
支持楼主。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-02-03 9:28 
头像

注册: 2006-05-10 16:01
帖子: 259
地址: 安徽合肥
送出感谢: 0 次
接收感谢: 0 次
好样的楼主,只是不知道好用不?卡不卡,bug有多少,是什么原理,能完全替代终端下gdb吗?也就是说,gdb原来的操作全部支持?


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-02-03 11:10 
头像

注册: 2007-01-25 16:43
帖子: 786
地址: 塔尔塔洛斯
送出感谢: 0 次
接收感谢: 0 次
wangguangping 写道:
好样的楼主,只是不知道好用不?卡不卡,bug有多少,是什么原理,能完全替代终端下gdb吗?也就是说,gdb原来的操作全部支持?

卡倒是不卡,我觉得最大的好处就是看变量方便,而且step的时候也不用打命令,直接按shift+s就好了。bug还没发现,不过有时候把变量加到观察buffer的时候不灵,好像必须用鼠标点。原理不太清楚,好象是通过clewn把gvim和gdb连接起来,通过键绑定在gdb中调用相应的命令,并在gvim中以相应的方式显示出来。
调试的时候终端里是gdb,如果有必要的话还可以在终端里输入gdb命令。
最近好像也用不到gdb,全当好玩试了一下,没有深入研究


_________________
我生平瞧不起两种人:
1.那些瞧不起用windows的人的人
2.用windows的人
3.不识数的人

博客:http://blog.chunhao.net
主页:http://chunhao.net


最后由 ciclo 编辑于 2008-02-03 11:16,总共编辑了 1 次

页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-02-03 11:14 
头像

注册: 2007-01-25 16:43
帖子: 786
地址: 塔尔塔洛斯
送出感谢: 0 次
接收感谢: 0 次
最新发现,把鼠标放在变量上可以气球提示变量当前的值


附件:
screenshot4.png
screenshot4.png [ 57.37 KiB | 被浏览 12296 次 ]



_________________
我生平瞧不起两种人:
1.那些瞧不起用windows的人的人
2.用windows的人
3.不识数的人

博客:http://blog.chunhao.net
主页:http://chunhao.net
页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-02-03 11:20 
头像

注册: 2006-05-10 16:01
帖子: 259
地址: 安徽合肥
送出感谢: 0 次
接收感谢: 0 次
我试了一下,感觉还不错,只是开始切分窗口以及调试过程不是很顺畅,有些烦琐,并且在观查变量值时只对鼠标选中的变量有反应,这样一来,在键盘与鼠标之间来回切换有些麻烦。

总体不错,但也有不足:

1、只支持linux下的gvim, 不支持vim;
2、启动模式及操作方式应进一步完善精炼;
3、需.configure/make/make install式安装,编译过的插件是否可用,还没试过,最好能以插件形式跨平台可移动。

不过仍是很好的尝试,总比vimgdb非要打补丁编译vim强不少。


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-02-03 11:52 
头像

注册: 2007-01-25 16:43
帖子: 786
地址: 塔尔塔洛斯
送出感谢: 0 次
接收感谢: 0 次
不编译比什么都好 :D


_________________
我生平瞧不起两种人:
1.那些瞧不起用windows的人的人
2.用windows的人
3.不识数的人

博客:http://blog.chunhao.net
主页:http://chunhao.net


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-02-03 19:27 
头像

注册: 2006-05-19 9:54
帖子: 1822
地址: Shanghai
送出感谢: 2
接收感谢: 11
支持lz发这个总结贴

------------------------------- 华丽的分割线 ---------------------------------

1、只支持linux下的gvim, 不支持vim;
vim需要用vimgdb,clewn至少用到了balloon功能,vim可不能用

2、启动模式及操作方式应进一步完善精炼;
在vim下,可以进行可视化的调试已经很不容易了,我是知足了:D

3、需.configure/make/make install式安装,编译过的插件是否可用,还没试过,最好能以插件形式跨平台可移动。
这是没办法的事情,其实其他插件也有纯vim script的形式,不过效果都远远不及clewn项目。vim本身并没有好方法和交互程序通讯。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-02-03 20:07 
头像

注册: 2007-01-25 16:43
帖子: 786
地址: 塔尔塔洛斯
送出感谢: 0 次
接收感谢: 0 次
其实.configure/make/make install安装的主要是clewn程序,插件的作用估计就是键绑定


_________________
我生平瞧不起两种人:
1.那些瞧不起用windows的人的人
2.用windows的人
3.不识数的人

博客:http://blog.chunhao.net
主页:http://chunhao.net


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-02-03 20:39 
头像

注册: 2007-01-15 17:15
帖子: 3766
送出感谢: 0 次
接收感谢: 0 次
export EDITOR=/usr/bin/vi
(gdb)edit


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-03-04 0:19 

注册: 2007-05-14 23:14
帖子: 264
送出感谢: 0 次
接收感谢: 0 次
这个是当时我苦苦找寻的东东啊,不过现在慢慢转向emacs。


_________________
KDE!!!
Linux 发行版永远都是在重复造轮子。
Linux 发行版总是把应由开发者关心问题抛给普通用户。


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-03-27 15:12 

注册: 2008-03-27 14:55
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
俺是初用vim写程序的小小菜鸟

试了一下,主要有两个问题
1。createvar 规模大的数组 就会出现command discarded...
2。调试过程中如果修改下小问题,编译,重新file xxx时原本的断点与查看的变量就要重新设置,很费时间

想了一个简陋但还算管用的方法:
在工作目录下建debug
clewn -va xxx.cpp -ga 'xxx -x var'

再建var
b main
run
display i
display j
display a
display b
.
.
.
(由于在gdb中display, 数组再大也可以稳定得显示、更新,而若用createvar那些数组,就很不稳定)
(可以加n多查看的变量、下断点)
在vim中专门vsplit打开这个var,专门维护 (可以绑定F7为mksession! a.map F8为source a.map 记录与载入当前工作环境)

然后每次修改查看的变量或是源码、重编译时,退出vim,. /debug——最大化vim源码窗口,切换至终端并调整终端窗口放在屏幕右半边,鼠标移至源码上(让焦点转移,但不能让终端逃到后面去),然后就shift+s吧。。。

不知道这个方法是不是太笨了呵~~~~~ 希望clewn、vim继续成长,希望有一天这些问题都可直接由clewn完成。。。


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-03-27 15:47 
头像

注册: 2007-04-25 13:12
帖子: 2838
送出感谢: 0 次
接收感谢: 0 次
留名
以后用


_________________
♜♞♝♛♚♝♞♜
♟♟♟♟♟♟♟♟
♙♙♙♙♙♙♙♙
♖♘♗♕♔♗♘♖

☠☯⚔⚓☣☦☃☕
☹☻☪☭☬⚖⚛⚜
ℜℳℬ™ ℋℯℓ℘ ℳℭ
sƂɐʍ рǀɹoʍ əɥʇ oS


页首
 用户资料  
 
15 楼 
 文章标题 : Re: vim连接gdb攻略(clewn)
帖子发表于 : 2009-08-25 10:30 

注册: 2009-08-25 10:29
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
哥们,太强大了,我安上了,谢谢啦


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 23 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Bing [Bot] 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译