1.什么是GDB
ubuntu上可以用来调试C,C++程序的debug工具。
2 如何安装GDB?
保证你的电脑上已经装有gcc、g++、cmake。
1. 下载最新的gdb
wget https://ftp.gnu.org/gnu/gdb/gdb-10.1.tar.gz
2. 解压包
tar -xzvf gdb-10.1.tar.gz
3. 生成makefile
cd gdb-10.1/
mkdir build
cd build
../configure
4. 编译安装
make编译时会出现tex相关错误,所以先安装 textinfo
sudo apt-get install texinfo
make -j8
sudo make install
2.GDB功能及其对应命令
GDB功能强大,调试命令也有很多。但是对常见命令并不多,如下表所示:
命令 |
描述 |
参考示例 |
gdb |
进入gdb调试 |
gdb |
help |
显示帮助信息 |
help |
quit(q) |
退出gdb调试环境 |
|
file |
加载被调试的可执行程序文件(文件是经过编译之后形成的可执行文件,在编译时,应该加上-g 选项,比如 gcc -o test_gdb test_dgb.c -g) |
file test_gdb |
list 行号 |
列出第几行开始的源代码 |
|
backtrace(bt) |
查看各级函数调用及参数 |
|
finish |
连续运行到当前函数返回为止,然后停下来等待命令 |
|
frame(f) 帧编号 |
选择栈帧 |
|
info(i) locals |
查看当前栈帧局部变量的值 |
|
list(l) |
列出源代码,接着上次的位置往下列,每次列十行 |
|
list 函数名 |
列出某个函数的源代码 |
|
next(n) |
执行下一行语句 |
|
print(p) |
打印表达式的值,通过表达式的值可以修改变量的值或者调用函数 |
|
run |
运行调试的程序(如果程序中没有设置断点,则程序会一直运行到结束或者出现异常结束,如果设置断点,则会在断点处停止) |
r(run) |
break break if condition break |
在某一行设置普通断点。 (运行到该行即停止) 在某一行设置条件断点 (运行到改行满足条件停止) 在某一个函数调用处设置断点 (运行到函数调用处即停止) |
b(break) 24 (行号) b 24 if index == 3 (条件) b getSum (函数名) |
---|---|---|
delete breakpoints 断点号 |
删掉此号的断点 |
|
clear |
清空所有的断点信息 |
clear |
continue(c) |
从当前位置开始连续运行程序,直到下一个断点或者程序结束 |
c(continue) |
set var |
修改变量的值 |
|
start |
开始执行程序,停在main函数第一行语句前面等待命令 |
|
step(s) |
执行下一行语句,如果有函数则进入到函数中 |
|
display 变量名 |
跟踪查看某个变量,每次停下来都显示它的值 |
|
disable breakpoints 断点号 |
禁用此断点 |
|
enable 断点号 |
启用此断点 |
|
info(i) breakpoints |
查看当前设置了哪些断点 |
|
undisplay 跟踪显示行号 |
取消跟踪显示 |
|
watch |
设置观察点 |
|
info(i) watchpoints |
查看当前设置了哪些观察点 |
|
x |
从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量 |
3.举例说明
有程序mytest.cpp代码如下
#include <stdio.h>
int func(int n)
{
int sum=0,i;
for(i=0; i<n; i++)
{
sum+=i;
}
return sum;
}
int main()
{
int i;
int result = 0;
for(i=1; i<=100; i++)
{
result += i;
}
printf("result[1-100] = %d /n", result );
printf("result[1-250] = %d /n", func(250) );
}
3.1 编译的要点
对源程序进行编译,加上-g选项,使其可以进行调试。其结果是生成可执行文件test_gdb,并且可以对其进行gdb调试(对于该命令的详细解释,可以查看gcc命令)
gcc -o test_gdb mytest.cpp -g
3.2 如何进入gdb环境
进入gdb调试:
gdb
如上图最后一行所示,代表进入gdb调试,等待用户命令输入。
3 .3 加载被跟踪文件
加载文件
file test_gdb
显示加载成功。
3.4 显示程序段
list
3.5 如果在设置断点之前,输入r
run
程序正常运行,并且停留在第一条执行语句上,等待继续操作。
参考文章:
GDB调试从基础到精通实例 - azraelly - 博客园
ubuntu-mate下载: