GDB(GNU Debuger)是Linux中的一个功能强大的调试器。GDB可以让你查看程序的内部结构,打印变量值,设置断点,单步调试源码,运行时修改变量值,路径跟踪,线程切换,显示汇编代码等。
编译
要使用GDB进行调试,在编译程序时需要加入-g选项。当设置了这个选项后,GCC会向程序中加入调试信息“楔子”,GDB能用利用这些楔子与程序交互。
gcc -g myfile.c -o myfile_debug
调试
-
加载程序
可以使用gdb program的方式,或者在GDB启动后用file program的方法启动。 -
设置输入参数及显示
set args命令设置发送给程序的参数;show args命令显示其默认的参数。 -
打印代码内容
list line1,line2 打印代码,不输入参数则从当前行打印。打印数据用print -
断点
设置断点:1. break 行号;2. break 函数名称;3. break 行号或者函数if条件:这是一个条件断点设置命令,如果条件为真,则程序在到达指定行或函数时停止。如b 38 if i==2
显示断点信息:info break
删除指定的某个断点:delete breakpoint 断点编号。 如果不带编号参数,将删除所有断点
禁止断点:disable breakpoint 断点编号
允许断点:enable breakpoint 断点编号
清除断点:clear 源代码行号。 一次性清除直接clear -
运行程序
使用run命令运行准备好的程序,在它后面是传递给程序的参数。如果使用不带参数的run命令,GDB就再次使用前一条run命令的参数。 -
检测变量类型
打印数组或变量的类型:whatis 变量名
查看结构的详细定义用ptype 变量名 -
单步调试
单步调试用next或step命令,step可进入函数体内部。如果已经进入函数内部,想退出函数的运行返回到调用函数中,可使用命令finish。 -
设置检测点
命令display可以显示某个变量的值,在结束或者遇到断点的时候,将设置变量的值显示出来(作用域内)。 -
调用路径(栈信息)
backtrace 命令可打印函数的调用路径,提供向前跟踪功能。简写bt -
多线程thread
info thread列出当前进程中的线程号,用thread id进入需要调试的线程 -
汇编disassemble
disassemble 函数名,打印指定函数的汇编代码
常用命令