GCC 调试/gdb
外观
< GCC 调试
- 程序必须先进行编译以便调试
- gcc -g <filname.c> -o <输出文件名>
- 例如: gcc -g debug_me.c -o debug_me
- "-g" 标志很重要(为了创建符号表)
- 使用以下命令启动调试器
- gdb <程序名称>
- 例如: gdb debug_me
- 运行、打印、where、断点、cond、单步、下一步、设置、忽略
- 运行程序
- 在运行时向程序传递参数
- run <arg1> <arg2>
- 例如: run 12 35
- 例如: run "hello world" "goodbye world"
- 在特定区域\函数处设置“断点”
- break <函数名称>
- 例如: break main
- 或
- 例如: b main
- break <文件名>:<要停止的代码行>
- 例如: break debug_me.c:5
- 断点的简写
- 执行下一行代码
- 例如: next
- 下一行代码,单步进入函数
- 例如: step
- 转到下一个断点或程序结束
- 继续的简写
- 打印变量\表达式的值
- print <变量名>
- 例如: print x
- 在每一步都打印变量\表达式的值
- 例如: disp x
- 取消显示命令
- 例如: undisplay 3
- 将停止位置 3 处的变量在每次显示时都显示
- 在调用堆栈中移动
- ...
- 上移: 调用堆栈中的上一步
- 下移: 调用堆栈中的下一步
- 显示特定位置的代码
- list <无参数>
- 显示当前位置的代码,然后再次输入时显示下一个位置的代码
- 例如: list
- list -
- 显示先前位置的代码,然后再次输入时显示之前的位置的代码
- list <函数名称>
- 显示函数定义中的代码
- 例如: list func1
- 条件
- cond <断点> <条件>
- 例如: cond 1 val>0
- 当“val”大于 0 时,在断点“1”处停止
- 更改值,例如
- set variable x = 12
- 将把 x 的值更改为 12
忽略断点指定次数。
用法: ignore <id> <count>
ignore 2 20 --> 断点 2 将不会被命中 20 次。
- 退出 gdb
- 退出的简写