1.简介
gdb调试工具是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也是足以与微软Visual Studio等工具媲美的。
2.gdb使用流程
(1)首先编辑一段c代码,如下所示:
/*test.c*/
#include
int sum(int );
int main()
{
int i,n = 0;
sum(50);
for(i=1;i<=50;i++)
{
n += i;
}
printf("Then sum for 1-50 is %d
",n);
}
int sum(int m)
{
int i,n = 0;
for(i=1;i<=m;i++)
{
n += i;
}
printf("Then sum of 1-m is %d
",n);
}
(2)编译命令:gcc -g test.c -o test(注意:一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件)
(3)启动gdb命令:gdb test(注意:test是可执行文件,不是c文件test.c)
(4)查看文件:在gdb中键入“l”或“list”,gdb会显示行号
(5)设置断点:在gdb中键入“b 8”或“break 8”,表示在第8行设置断点
(6)查看断点:在gdb中键入“info b”,表示查看设置的所有断点
(7)运行代码:在gdb中键入“r”或“run”,运行代码后,代码停留在先前设置的断点处
(8)查看变量值:在gdb中键入“p n”或“print n”,表示查看变量n的值
(9)单步运行:在gdb中键入“n”(next)或“s”(step)都表示单步运行,两者的区别在于“s”会进入函数而“n”不会进入函数,类似于Visual C++的“step in”和“step over”
(10)恢复程序运行:在gdb中键入“c”或“continue”,表示程序继续运行
3.gdb基本命令
(1)工作环境相关命令
gdb中不仅可以调试所运行的程序,而且还可以对程序相关的工作环境进行相应的设定,甚至还可以使用shell中的命令进行相关的操作。
gdb工作环境相关命令
命令格式 |
含义 |
set args运行时的参数
指定运行时参数,如set args 2
show args
查看设置好的运行参数
path dir
设定程序的运行路径
show paths
查看程序的运行路径
set enviroment var [=value]
设置环境变量
show enviroment [var]
查看环境变量
cd dir
进入dir目录,相当于shell中的cd命令
pwd
显示当前工作目录
shell command
运行shell的command命令
(2)设置断点与恢复命令
gdb设置断点与恢复相关命令
命令格式 |
含义 |
info b
查看所设断点
break [文件名:] 行号或函数名 <条件表达式>
设置断点
tbreak [文件名:] 行号或函数名 <条件表达式>
设置临时断点,到达后被自动删除
delete [断点号]
删除指定断点,其断点号为“info b”中的第一栏。若默认断点号则删除所有断点
disable [断点号]
停止指定断点,使用“info b”仍能查看此断点。同delete一样,若默认断点号则停止所有断点
enable [断点号]
激活指定断点,即激活被disable停止的端点
condition [断点号] <条件表达式>
修改对应端点的条件
ignore [断点号]
在程序执行中,忽略对应断点num次
step
单步恢复程序运行,且进入函数调用
next
单步恢复程序运行,但不进入函数调用
finish
运行程序,直到当前函数完成返回
c
继续执行函数,直到函数结束或遇到新的断点
两种设置断点的方法:
①函数断点:gdb中按行数设置断点只需要把函数名列在命令“b”之后,如下所示:
②条件断点:gdb中设置条件断点的格式为:b 行数或函数名if表达式
(3)gdb中源码查看相关命令
gdb源码查看相关命令
命令格式 |
含义 |
list <行号>|<函数名>
查看指定位置代码
file [文件名]
加载指定文件
forward-search 正则表达式
源代码的前向指定文件
reverse-search 正则表达式
源代码的后向指定文件
dir DIR
将路径DIR添加到源文件搜索的路径的开头
show directories
显示源文件的当前搜索路径
info line
显示加载到gdb内存中的代码
(4)gdb中查看运行数据相关命令
gdb中查看运行数据是指当前程序处于“运行”或“暂停”状态时,可以查看的变量及表达式的信息。
命令格式 |
含义 |
print 表达式|变量
查看程序运行时对应表达式和变量的值
x
查看内存变量内容。其中n为整数表示显示内存的长度,f表示显示的格式,u表示从当前地址往后请求显示的字节数
display 表达式
设定在单步运行或其他情况中,自动显示的对应表达式的内容
backtrace
查看当前栈的情况,即可以查到哪些被调用的函数尚未返回
(5)gdb中修改运行参数相关命令
gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set var 变量=设定值”。这样,在此之后,程序就会按照该设定的值运行了。