Markdown to HTML

AuroBreeze Blog

A tiny, fast Markdown blog for GitHub Pages.

GDB 调试工具简明指南

GDB 调试工具简明指南

基本命令

  1. 启动调试: gdb 可执行文件
  2. 运行程序: runr
  3. 单步执行:
  4. next (不进入函数)
  5. step (进入函数)
  6. finish (执行完当前函数并返回)
  7. 继续运行: continuec
  8. 打印变量: print 变量名p 变量名
  9. 查看和切换堆栈:
  10. backtracebt (查看调用栈)
  11. frame 帧号 (切换到指定栈帧)
  12. 退出gdb: quitq

常用调试场景

1. 调试崩溃程序

gdb 可执行文件 core文件
bt  # 查看崩溃时的调用栈

2. 查看内存

x/格式 地址
例如: x/10x 0x123456  # 查看16进制格式的10个字

3. 修改变量值

set var 变量名=值

4. 多线程调试

info threads  # 查看线程
thread 线程号  # 切换线程

小技巧

  1. 使用layout src可以显示源代码窗口
  2. -tui选项启动图形界面模式

断点管理

  1. 设置断点:
  2. break 函数名b 函数名 (在函数入口设置断点)
  3. break 文件名:行号 (在指定文件的指定行设置断点)
  4. break *地址 (在内存地址处设置断点)

  5. 查看断点:

  6. info breakpointsi b (列出所有断点)
  7. info break 断点号 (查看特定断点详情)

  8. 删除断点:

  9. delete 断点号d 断点号 (删除指定断点)
  10. delete (删除所有断点)
  11. clear 函数名 (删除函数上的断点)
  12. clear 文件名:行号 (删除指定位置的断点)

  13. 禁用/启用断点:

  14. disable 断点号 (禁用断点)
  15. enable 断点号 (启用断点)

Watchpoint 监控点

  1. watch 变量名 - 当变量被写入时中断
  2. rwatch 变量名 - 当变量被读取时中断
  3. awatch 变量名 - 当变量被读取或写入时中断

使用示例:

(gdb) watch my_var    # 监控my_var变量的写入
(gdb) rwatch ptr      # 监控ptr指针的读取 
(gdb) awatch counter  # 监控counter变量的读写

查看监控点:

  • info watchpointsi wa (列出所有监控点)

删除监控点:

  • 与断点相同, 使用delete命令