GDB


GDB(GNU Debugger)是GCC的调试工具

生成调试信息

GDB主要调试的是C/C++的程序。首先在编译时, 必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数实现 注意:-g 是在可执行程序中加入源码信息,并非将整个源文件嵌入可执行程序。因此调试时候源文件必须仍旧存在;

gcc -g hello.c -o hello
# 如果没有-g, 你将看不见程序的函数名、变量名, 所代替的全是运行时的内存地址

启动gdb

# 启动gdb
gdb program

# 设置运行参数
set args hello world
show args

显示源码

list 		# 打印当前行后面的程序
list - 	# 打印当前文件开始出的源程序
list file: lineNum # 显示file文件下第n行
list file: func		 # 显示file文件的func函数

set listsize n		 # 设置一次显示源代码的行数
show listsize			 # 查看当前listsize的设置

设置断点

b n					# n对应行号断点
b func			# func函数处断点
b file:n
b file:func
b test.c:8 if intValue == 5	# 条件断点

info break	# 断点信息

disable m n | m-n # 关闭断点
enable  m n | m-n	# 打开断点
delete m n | m-n 	# 删除断点

调试代码

run			# 停在第一个断点
start		# 停在第一条语句

next		# 单步跟踪,不进入函数体

step		# 单步,函数调用进入函数体内
finish	# 退出进入的函数,如果无效,可能是设置有断点 

until		# 退出循环体
continue# 运行到下一个断点处

追踪变量

print var 		# 打印变量


display var		# 持续显示变量
info display	# display相关信息
# 关闭/打开持续显示变量
disable display m n | m-n
enable display m n | m-n


delete display m n | m-n
undisplay m n | m-n

ptype var   		# 查看变量var的类型
p var 					# 打印变量var的值
set var i=1     # 修改变量参数

多进程调试

show follow-fork-mode
set follow-fork-mode [parent(默认) | child]
show detach-on-fork
set detach-on-fork [on(默认) | off]
info inferiors
inferior id
detach inferiors id