gdb 是一个由 GNU 开源组织发布的、UNIX/LINUX 操做系统下的、基于命令行的、功能强大的程序调试工具。固然了,通常都是使用 gdb 调试 c/cpp 程序。shell
通常来讲,GDB主要帮忙你完成下面四个方面的功能:函数
gdb 功能很强大,所以命令也不少,可是并不见得都能用获得,对于平常使用来讲,知道一些经常使用的就够用了。工具
代码在编译时要加上 -g
选项,生成的可执行文件才能用 gdb 进行源码级调试。
好比,gcc -g main.c -o main
。-g
选项的做用是在可执行文件中加入源代码的信息,好比可执行文件中第几条机器指令对应源代码的第几行,但并非把整个源文件嵌入到可执行文件中,因此在调试时必须保证gdb能找到源文件。ui
list linenum,打印出以 linenum 行为中心的上下几行源码。
list func,打印以函数 func 定义所在行为中心的上下几行代码。
list, 打印当前行后面的源程序,每次10行。操作系统
运行程序至第一个断点处中止。.net
break linenum,在第 linenum 处设置一个断点。
break func,在 func 函数入口处设置一个断点。命令行
d 断点num,删除第 num 个断点。调试
执行一行源程序代码,若是此行代码中有函数调用,则进入该函数。code
与 step 相反,n 表示不进入函数内容,继续执行。blog
print 变量名,打印出变量值。
查看各级函数调用及参数。
frame 帧编号,选择栈帧。
set var 变量=值,修改某变量的值。
或者用 print
指令也能达到目的。
让程序一直运行到从当前函数返回为止。
info break,查看全部已经设置的断点信息。
info locals,查看当前栈帧局部变量的值。
不离开 gdb 就执行 UNIX shell 命令
获取帮助信息。
离开 gdb。
注意: 上述命令几乎均可以使用首字母来简写长命令。
gdb 可执行文件 产生的coredump文件,好比,gdb test core.3533
。