GDB 使用指北
记得加上 -g
。
常用命令(转自 OI wiki):
list
(l
):列出程序源代码,如l main
指定列出main
函数附近的若干行代码。break
(b
):设置断点,如b main
表示在main
函数处设置断点。if <CONDITION>
:如果满足条件,则设置断点,如 b 137 if i == n && j == m
run
(r
):运行程序直到程序结束运行或遇到断点。continue
(c
):在程序遇到断点后继续执行,直到程序结束运行或到达下一个断点。if <CONDITION>
:用法同b if
next
(n
):执行当前行语句,如果当前行有函数调用,则将其视为一个整体执行。if <CONDITION>
:用法同上。step
(s
):执行当前行语句,如果当前行有函数调用,则进入该函数内部。finish
(fin
):继续执行至当前函数返回。call
:调用某个函数,例如:call f(2)
(以参数 2 调用函数 f)。quit
(q
):退出 gdb。display
(disp
):指定程序暂停时显示的表达式。print
(p
):打印表达式的值。delete display <NUM>
:删除第个表达式 clear <NUM/FUNC>
:删除断点
display
和 print
指令都支持控制输出格式,其方法是在命令后紧跟 /
与格式字符,例如 p/d test
(按照十进制打印变量 test 的值),
支持的格式字符有:
格式字符 | 对应格式 |
---|---|
d | 按十进制格式显示变量 |
x | 按十六进制格式显示变量 |
a | 按十六进制格式显示变量 |
t | 按二进制格式显示变量 |
c | 按字符格式显示变量 |
f | 按浮点数格式显示变量 |
u | 按十进制格式显示无符号整型 |
o | 按八进制格式显示变量 |
注意如果有 breakpoint 一定优先在 breakpoint 停下,而不是取决于使用了 n 还是 s。
遇到 breakpoint 会在那一行停下来,然后显示代码。
一些常见异常返回值:
SIGFPE (8)
:除零异常。SIGSEGV (11)
:无效内存,无权限写入。SIGILL (4)
:堆栈溢出,数组越界破坏堆栈。
最后更新:
May 9, 2023