Linux调试工具——gdb

2019-07-12 14:13发布

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 变量=设定值”。这样,在此之后,程序就会按照该设定的值运行了。