【Linux】ghb工具

发布于:2025-06-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

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  # 获取所有线程调用栈

常见问题解决

  1. "No symbol table"错误

    • 确保编译时加了-g选项

    • 检查是否strip过可执行文件

  2. 调试优化过的代码

    gcc -O1 -g program.c -o program
    gdb ./program
    (gdb) set print pretty on

  3. 远程调试

    # 目标机器
    gdbserver :1234 ./program
    
    # 开发机器
    gdb
    (gdb) target remote target_ip:1234

结语

GDB是Linux开发者不可或缺的调试利器,从简单的程序崩溃分析到复杂的多线程问题定位,GDB都能提供强大的支持。掌握GDB不仅可以提高调试效率,更能帮助你深入理解程序运行机制。建议从基础命令开始练习,逐步掌握高级功能,最终结合各种插件打造个性化的调试环境。


网站公告

今日签到

点亮在社区的每一天
去签到