GDB常用命令:
r : run ,运行被调试程序, 如果此前没有下过断点,则执行完整个程序;如果有断点, 则程序暂停在第一个可用断点处
c : continue , 继续执行被调试程序, 直至下一个断点或程序结束
b : break , 设置断点
d : delete {id_no}, 删除指定编号的某个断点, 不带参数则为删除所有断点
s : step , 执行一行源程序代码, 如果此行代码中有函数调用, 则进入该函数
n : next , 执行一行源程序代码, 此行代码中的函数调用也一并执行
p : print , 显示指定变量的值
bt : backtrace ,打印程序的调栈
display : 设置程序中断后欲显示的数据及其格式
undisplay {id_no} : 取消先前的display设置(断点编号从1开始递增)
i : info , 用于显示各类信息
q : quit , 退出GDB调试环境
help : GDB帮助命令
gdb调试线程:
info threads 显示当前进程的所有线程
thread {id_no} 切换进到指定线程,id_no 可以通过 info threads 查看
info source 显示当前调试的源文件
gdb带参数调试:
- shell环境下执行gdb --args ./program arg1 arg2 arg3
- shell环境下执行gdb ./program, 进入gdb后,r arg1 arg2 arg3
- shell环境下执行gdb ./program, 进入gdb后,set args arg1 arg2 arg3
gdb断点设置
b file.c:36 # 执行到file.c的第36行时触发断点
b function # 执行到function时触发断点
b file.c:36 if cnt==0 # 如果执行到file.c的第36行且满足cnt==0, 触发断点
gdb 打印设置:
set print null-stop # 如果打开了这个选项,那么当显示字符串时,遇到结束符则停止显示。这个选项默认为 off。
set print pretty on # 格式化结构体显示。
set print array on # 打开数组显示,打开后当数组显示时,每个元素占一行,如果不打开的话,每个元素则以逗号分隔。这个选项默认是 off。
set print array-indexes on # 打印数组元素的下标, 默认是 off 。
set print union on # 打印 C 中的联合体, 默认是 on 。
set print address # 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为 on。