使用条件
编译时需用 debug 模式,否则无法在调试时看到符号及文件,为此要在 gcc 的参数里加"-g",对于 cmake,需要在编译参数中加 "-DCMAKE_BUILD_TYPE=Debug"
启动程序
(shell) $ gdb --args EXE-FILE ARGS... // 启动程序并附带参数
$ r // 开始执行程序
$ r ARGS... // 传递参数并执行
$ start // 启动但不执行
$ set args ARGS... // 设置启动参数
查看
- 代码
$ l // 首次显示当前帧附近代码,然后按顺序显示之后的代码(用f命令可回到当前帧)
$ l 5 // 显示第5行周围的代码
$ l 5,10 // 显示 5-10 行代码
$ l FUNCTION // 显示函数附近代码
$ layout src // 打卡源代码窗口
$ ctrl+x a // 关闭源代码窗口
$ ctrl+l // 刷新源代码窗口
- 变量
$ p VAR // 打印变量 'id' 的值
$ p/x VAR // 以十六进制形式打印 id 的值
$ p/t VAR // 以二进制形式打印 id 的值
$ p/f VAR // 以浮点形式打印 id 的值
$ p var@N // 将 var 视为数组,打印前 N 个元素
$ ptype VAR // 打印 var 的类型
$ x/nx &VAR // 从var地址开始以十六进制形式输出n字节
$ x/s &VAR // 从var地址开始输出字符串
$ x/nb $VAR // 从var地址开始以二进制形式输出n字节
$ printf FORMAT STRING // 格式化打印
$ i locals // 查看当前位置局部变量
$ display EXP // 追踪表达式的值
$ watch EXP // 监控表达式,当其值变化时停止执行
堆栈
$ f // 当前代码运行帧
$ bt // 查看当前调用栈
$ return // 从当前帧立即返回(不执行之后的代码)
$ return VALUE // 从当前帧立即返回,并带上指定的返回值
$ up // 查看上层一帧(不改变执行)
$ down // 查看下层一帧(不改变执行)
断点
$ i b // 显示所有断点
$ b // 在当前位置断点
$ b FUNCTION // 在函数上断点
$ b LINE // 在行号上断点
$ b FOO::BAR() // 在类的方法上断点
$ b LOCTION if COND // 条件断点
$ d INDEX // 删除第 index 个断点
$ condition N COND // 在第N个断点上加条件
执行
$ s // 步入
$ n // 步进
$ n N // 步进 N 行
$ c // 连续执行直到下一个断点或程序结束
$ u // 执行到比当前行号更高的位置(可用于跳出循环,但速度较慢)
$ u POSITION // 执行到某个位置(行号、函数),参数和 'b' 相同
$ finish // 执行完当前函数
文件
$ pwd // 显示当前目录
$ cd PATH // 工作区跳转到 path