在大多数Linux发行版中,可以通过包管理器安装GDB:
# Debian/Ubuntu
sudo apt-get install gdb
# CentOS/RHEL
sudo yum install gdb
# Arch Linux
sudo pacman -S gdb
在使用GDB调试前,需要用-g
选项编译程序以包含调试信息:
gcc -g program.c -o program
对于C++程序:
g++ -g program.cpp -o program
启动GDB调试程序:
gdb ./program
或者附加到正在运行的进程:
gdb -p PID
命令 | 缩写 | 功能描述 |
---|---|---|
run | r | 开始执行程序 |
break | b | 设置断点 |
continue | c | 继续执行到下一个断点 |
next | n | 执行下一行代码(不进入函数) |
step | s | 执行下一行代码(进入函数) |
p | 打印变量值 | |
backtrace | bt | 显示调用栈 |
frame | f | 选择栈帧 |
list | l | 显示源代码 |
quit | q | 退出GDB |
在用户主目录或项目目录下创建.gdbinit
文件进行个性化配置:
touch ~/.gdbinit
示例配置内容:
# 显示漂亮的打印
set print pretty on
# 设置历史记录大小
set history save on
set history size 1000
# 设置反汇编风格
set disassembly-flavor intel
# 自定义命令
define ll
bt full
end
GDB的文本用户界面(TUI)可以提供更好的调试体验:
gdb -tui ./program
或者在GDB中切换:
(gdb) tui enable
现代GDB支持Python扩展,可以增强调试功能:
(gdb) python
>import gdb
>class MyBreakpoint(gdb.Breakpoint):
> def stop(self):
> print("Hit breakpoint at", self.location)
> return False
>end
(gdb) MyBreakpoint("main")
(gdb) break filename.c:123 if variable == value
(gdb) watch variable
(gdb) info threads # 查看所有线程
(gdb) thread 2 # 切换到线程2
gdb ./program core
如果更喜欢图形界面,可以考虑以下GDB前端:
调试优化过的代码可能会遇到变量不可用或执行顺序不一致的问题,可以:
-Og
优化级别(专门为调试优化的级别)volatile
关键字标记关键变量info registers
查看寄存器值gcc -Og -g program.c -o program
GDB支持远程调试,常用于嵌入式开发:
# 目标机
gdbserver :1234 ./program
# 开发机
gdb ./program
(gdb) target remote target_ip:1234
help
命令查看帮助-ex
参数在启动时执行命令gdb -ex "set logging on" ./program
通过以上配置和技巧,您可以更高效地使用GDB进行Linux下的程序调试。