Linux下CGDB使用教程
CGDB是GDB的前端,地址是https://cgdb.github.io/,基于ncurse,可以让用户用图形化的方式去调试代码,非常方便。
虽然GDB的TUI模式也是图形化,但是很容易产生撕裂现象,需要redraw,用起来难受,而且没有语法高亮。
本文主要讲述CGDB一些常用的使用方法。
一 安装
本人使用的Linux系统是Debian10 64位,Ubuntu也差不多。
去官网下载Stable版本,或者去其github地址下载release版本,本文写作时当前Stable版本为0.7.1
下载下来后解压,cd到源码目录,然后执行下面命令
sudo apt install automake
sudo apt install ncurses-devel
sudo apt install flex
sudo apt install texinfo
sudo apt install libreadline-dev
然后执行configure,
./configure
如果缺少依赖库,configure命令会在最后进行提示,可以根据提示自行安装。
configure没有问题之后,执行编译和安装,
make
sudo make install
如果是从Github上下载下来的,解压后要先执行autogen.sh去生成configure文件,后面都是一样操作了,具体可以参阅源码里的Readme.md文件
二 使用
首先准备一个代码工程,如下,
main.c内容如下,
#include <stdio.h>
#include "func.h"
int main(void)
{
int aa = 100;
int bb = 200;
int cc = func(aa+bb);
printf("cc: %d\n", cc);
return 0;
}
func.h内容如下,
#ifndef FUNC_H_
#define FUNC_H_
int func(int data);
#endif
func.c内容如下,
int func(int data)
{
int newData = data+500;
return newData;
}
CMakeLists.txt内容如下,
cmake_minimum_required (VERSION 3.5)
project (demo)
add_executable(main src/main.c src/func.c)
然后cd到build目录下,执行下列语句生成debug版本的程序,
cmake -DCMAKE_BUILD_TYPE=Debug .. && make
然后在build目录下执行cgdb,
cgdb main #如果有参数,则是 cgdb --args main xx,与gdb一样
出现如下窗口,
中间一道分割条,分割条中显式当前打开的文件名。
分割条上面是Source窗口,按Esc键进入Source窗口;分割条下面是GDB窗口,按“i”进入GDB窗口。
在Source窗口中,可以按上下键逐行查看,或者page up/down翻页查看,当前光标所在行会有一个block进行提示,
调整这2个窗口的占比,首先按下esc,然后使用“+”和“-”来调整。
常规用法
进入GDB窗口后,所有指令都是和gdb一样的,输入b main
在main函数设置断点,然后输入r
回车,开始运行,gdb相关的调试指令参考这篇文章,不再赘述
假如我们想打开func.c,然后在里面设置个断点,该怎样做呢?首先按Esc进入Source窗口,然后按o
打开源码列表,此时出现的窗口叫文件浏览窗口,
按上下键选择需要的文件,如果文件太多,按/
,然后输入文件名来查找。找到文件后,回车打开,
例如想在第5行打个断点,先将光标移动到第5行,然后按空格,断点就会打上,再按一次空格就会删除这个断点;或者按i
进入GDB窗口,然后输入b 5
回车,
第5行就会变成红色,表示断点已经打上了。如果源文件里代码,需要进行查找,先按Esc进入Source窗口,然后输入/
,最后输入关键字就可以查找和定位了,还可以按n
进行查找下一个,按N
查找上一个。
按Esc回到Souece窗口,按o
打开文件列表,然后打开main.c回到开始的地方,输入‘c’运行,就可以运行到func()里的断点位置了,执行到的当前位置使用一个长箭头进行指示。
PS:程序执行的位置和光标指示的位置2者意思是不一样的。
三 配置cgdb
cgdb使用一个叫cgdbrc的文件来进行配置,cgdb启动时会去读取这个文件,这样就可以把我们喜欢的配置保存到这个文件里。
例如Source窗口中的光标提示默认是一个block,我们想改成highlight,即点亮一整行,那么就可以在cgdbrc里输入下面的语句,
set selectedlinedisplay=highlight
首先使用vim打开这个文件,如果这个文件不存在就会自动创建,
vim ~/.cgdb/cgdbrc
然后把上面那句话写入到打开的cgdbrc里,接着source一下,
source ~/.cgdb/cgdbrc
然后使用cgdb去调试main,可以看到已经变成我们想要的了。
其它配置参数可以参考cgdb文档第4节CGDB configuration commands。
四 常用快捷键
进入Source窗口后可以使用以下快捷键进行debug,
其它可以参考cgdb文件第3.1节 Commands available during CGDB mode
更多推荐
所有评论(0)