跳转到内容

GCC 调试/gdb

来自 Wikibooks,开放书籍,开放世界

调试准备

[编辑 | 编辑源代码]
程序必须先进行编译以便调试
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

[编辑 | 编辑源代码]
取消显示命令
例如: 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
退出的简写
华夏公益教科书