Linux GDB调试器
gdb调试器。
Linux GDB调试器
GDB
Linux 中的 GDB (GNU Debugger) 是 GNU 项目开发的、功能强大的源代码级命令行调试器。它是 Linux 和类 Unix 系统上 C, C++, Fortran, Go 等编译型语言程序调试的标准工具。
简单来说,GDB 就像程序的“手术显微镜”🧬,让你能在程序运行时深入其内部,观察和控制其执行过程,帮助你找出代码中的错误(Bug)。
安装 gdb
1
sudo apt install gdb
编译源文件
使用 -g
选项,添加调试信息,更容易地调试程序
1
2
gcc -g -o hello hello.cpp
g++ -g -o hello hello.cpp
加载文件
使用 gdb
调试程序,首先
要加载必要的文件,如 可执行程序、core文件。
以可执行文件hello
为例。
方法1,启动 GDB 时直接加载(推荐)
1
2
3
4
5
# 只有可执行程序
gdb hello
# core文件
gdb hello core.11232
方法2,在 GDB 交互模式中手动加载
1
2
3
4
5
6
7
8
# 只有可执行程序
gdb
file hello
# core文件
gdb
file hello
core core.11232 # core 全写为 core-file
断点
break
命令,可简写为 b
,用于添加断点。
1
2
3
break 源文件行号
break 源文件函数名
b 源文件函数名
查看断点
1
2
3
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000000011b1 <main+8>
Num
为断点编号
。
delete
,d
,用于删除断点。
1
2
delete 断点编号
d breakpoints # 删除所有断点
断点有效性
1
2
3
4
5
disable b(breakpoints) # 使所有断点无效【默认缺省】
enable b(breakpoints) # 使所有断点有效【默认缺省】
disable b(breakpoints) + 编号 # 使一个断点无效【禁用断点】
enable b(breakpoints) + 编号 # 使一个断点有效【开启断点】
这里breakpoints
可以简写为 b
,且可以省略。
运行程序
run
,简写为 r
。
1
2
r
run
单步执行
next
,简写为 n
。
步入
step
,简写为 s
,用于进入函数体。
继续执行
continue
,简写为 c
。
调用栈
backtrace
,bt
,显示函数调用栈(含参数)。
打印
print
,p
,打印变量值。
1
p var
set
set
设置变量值,修改运行中的变量值。
1
set var 变量名=value
finish
finish
在一个函数内部,执行到当前函数返回,然后停下来等待命令
退出gdb调试
1
2
3
q
quit
exit
列出源代码
list
,l
。
1
2
3
4
5
6
7
8
9
10
11
12
13
# 显示当前行附近的源代码
l
list
# 从第一行开始往下列10行的内容
l 0
l 1
# 显示文件 filename.c 的第10行附近的代码
l filename.cpp:10
# 列出指定函数的完整源码,函数需在当前加载的符号表中
l 函数名
display 和 undisplay
display
用于 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】。
1
display num1
undisplay
用于 取消对先前设置的那些变量的跟踪。
1
undisplay 变量编号
until
until
运行到指定行。
1
until 行号
目标行需在当前函数内,即行号
是从该函数开始编号的。
本文由作者按照 CC BY 4.0 进行授权