这篇文章上次修改于 902 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
1 使用 gdb 调试 c++ 注意事项
在编译选项中加入 -g set(CMAKE_CXX_FLAGS "-g")
2 进入 gdb 调试模式
对于一个可执行文件,进入 gdb 调试模式:
- 直接使用 gdb filename 进入
- 先进入 gdb 调试模式,再使用 filename 装载该文件
3 gdb 常用指令
3.1 一般指令
run/r:运行
continue/c:在断点之后继续运行
next/n:单步运行
step/s:单步运行,遇到函数会 step into
list:显示函数,默认显示的行数为 10,可通过 set listsize 20 把默认的显示改为 20
set args:设置参数
show args:显示设置的参数
3.2 breakpoint, watchpoint
break/b: 设置断点。args:
- linenum:在当前 source file 指定行加断点
- +offset:在当前的 +offset 处设置断点
- function:在指定的函数加断点,对于 c++,可以加上类名和命名空间,如 b A:func
- if cond:当条件为真是加断点
设置 watchpoint:
- watch variable:程序会在 variable 的值改变之后停止。
查看,删除,disable 断点:
- info breakpoint:显示所有断点
- clear:删除当前行的断点
- delete/d:删除所有断点
- delete n:删除第 n 个断点
- disable n:禁用第 n 个断点
- enable n:启用第 n 个断点
显示程序中变量的值
- print:打印变量的当前值
- display:每当程序停止时打印该变量的值
- 可以使用 delete 和 disable 删除/禁用要 display 的变量
改变程序的运行
- print i=100:将变量 i 的值改为 100
- jump linenum:跳转到特定的行
- return:强制函数返回
- call func():强制调用函数
分析程序崩溃原因
- backtrace/bt: 查看调用堆栈
- frame n:进入相应的代码段
没有评论