【Linux】ghb工具
GDB简介
GDB(GNU Debugger)是Linux系统中最强大的命令行调试工具,由GNU项目开发。作为程序员调试C/C++程序的利器,GDB能帮助你:
-
定位程序崩溃原因
-
分析程序运行状态
-
跟踪变量值变化
-
检测内存错误
安装与配置
安装方法
# Ubuntu/Debian
sudo apt install gdb# CentOS/RHEL
sudo yum install gdb# Arch Linux
sudo pacman -S gdb
编译选项
要使用GDB调试,编译时需添加-g
选项:
gcc -g program.c -o program
基础调试命令
1. 启动调试
gdb ./program # 启动调试
gdb --args ./program arg1 arg2 # 带参数启动
2. 常用命令速查表
命令 | 功能说明 | 示例 |
---|---|---|
break | 设置断点 | break main |
run | 运行程序 | run arg1 arg2 |
next | 单步执行(不进入函数) | next |
step | 单步执行(进入函数) | step |
print | 打印变量值 | print variable |
backtrace | 查看调用栈 | backtrace |
continue | 继续运行到下一个断点 | continue |
quit | 退出GDB | quit |
3. 断点管理
break function_name # 在函数入口设断点
break file.c:20 # 在指定文件的第20行设断点
info breakpoints # 查看所有断点
delete breakpoint 2 # 删除2号断点
高级调试技巧
1. 观察点(Watchpoint)
watch variable # 当变量值改变时暂停
rwatch variable # 当变量被读取时暂停
awatch variable # 当变量被读/写时暂停
2. 条件断点
break 20 if i==5 # 当i等于5时在第20行暂停
3. 多线程调试
info threads # 查看所有线程
thread 2 # 切换到2号线程
4. 内存检查
x/10x &array # 以16进制查看数组前10个元素
x/20s pointer # 查看指针指向的字符串(20字节)
实战调试示例
1. 段错误调试
# 编译
gcc -g segfault.c -o segfault# 调试
gdb ./segfault
(gdb) run
# 程序崩溃后
(gdb) backtrace
(gdb) frame 2 # 切换到调用栈第2层
(gdb) print *pointer
2. 死锁检测
(gdb) info threads # 查看线程状态
(gdb) thread apply all backtrace # 获取所有线程调用栈
常见问题解决
-
"No symbol table"错误
-
确保编译时加了
-g
选项 -
检查是否strip过可执行文件
-
-
调试优化过的代码
gcc -O1 -g program.c -o program gdb ./program (gdb) set print pretty on
-
远程调试
# 目标机器 gdbserver :1234 ./program# 开发机器 gdb (gdb) target remote target_ip:1234
结语
GDB是Linux开发者不可或缺的调试利器,从简单的程序崩溃分析到复杂的多线程问题定位,GDB都能提供强大的支持。掌握GDB不仅可以提高调试效率,更能帮助你深入理解程序运行机制。建议从基础命令开始练习,逐步掌握高级功能,最终结合各种插件打造个性化的调试环境。