序言
记录gdb常用操作命令
编译
- 编译生成可执行文件:
gcc -g Wall test.c -o test
-g // 加入调试信息,否则显示的是地址
-Wall // warning显示
1. 使用举例
@ 启动:gdb test
@ 查看主程序代码:l line_number // l是list的缩写
@ 继续查看源码:回车
@ 在某一行打断点:break 21 // 或 b 21
@ 在某函数打断点:break func // 或 b func
@ 查看断点情况:info break
@ 运行程序:r // run
@ 下一句:n // next
@ 继续运行:c // continue
@ 打印变量:p // print
@ 查看堆栈:bt // backtrace
@ 退出函数:fin // finish
@ 退出程序:q // quit
2. 断点
break line_number
break function
break +offset
break -offset // 在当前行的前/后offset行停住
break filename:line_number // 在源文件的某行停住
break filename:function // 在源文件的某个函数入口处停住
break // 在下一行指令处停住
break if condition // 条件成立时停住,如:break if i=100 // i=100时停住程序
info break // 查看所有断点
info break number // 查看第number个断点
3. 观察点
watch var // 为表达式或变量设置观察点,变量值有变化,马上停住程序
rwatch var // 变量被读read时停住程序
awatch var // 变量被读或写时停住程序
info watchpoints // 列出所有观察点
4. 捕捉点
catch event
// 捕捉某类事件,event包括throw/catch/exec/fork/vfork/load/unload/tcatch
5. 停止点维护
- 停止点:断点 + 观察点 + 捕捉点
clear // 清除所有已定义的停止点
clear function
clear filename:function // 清除所有设置在函数上的停止点
clear line_number
clear filename:line_number // 清除所有设置在指定行上的停止点
delete breakpoints range // 删除指定的断点,breakpoings-断点号,range-断点号范围
delete 5 // 清除第5个断点
delete 6-10 // 清除第6-10个断点
disable breakpoints range // disable所指定的停止点
disable // 禁止所有断点
disable 4 // 禁止第4个断点
disable 1-5 // 禁止第1-5个断点
enable breakpoints range // enable所指定的停止点
enable // 激活所有断点
enable 4 // 激活第4个断点
enable 5-6 // 激活5-6个断点
enable once breakpoints range // 使能一次,触发后禁止
enable delete breakpoints range // 使能一次,触发后删除
6. 代码查看
显示源码:
list line_number // 显示程序第line_number行附近的源程序
list function // 显示某个函数源码
list // 显示当前行后面的代码
list - // 显示当前行前面的代码
list start,end // 查看[start, end]之间的源码
list ,end // 从当前行到end行之间的源码
查看和设置查看行数:
show listsize // 查看当前listsize的设置
set listsize number // 设置一次显示源码的行数
代码地址查看:
info line function // 查看函数的内存地址范围
info line filename:func
info line line_number // 查看指定源码在内存中的地址
查看代码的汇编代码:
disassemble func // 查看函数func的汇编代码
7. 修改变量值
查看变量的值:
p width // 查看变量
p array // 查看数组
p array[1]
查看变量类型:
whatis width
设置变量的值:
set var width=47 // set width=47可能出错,set var告诉GDB,width是程序变量名
8. 编码格式
查看编码格式:
show host-charset
设置编码格式:
set charset UTF-8
9. 用例执行
执行整个测试套:
r --gtest_filter="testsuite.*"
执行单个测试用例:
r --gtest_filter="testsuite.testcase"
参考文章
100个gdb小技巧
Linux下gdb命令
2020-08-02 create by shuaixio