
关于
AI 代理的 GDB 调试助手——分析核心转储、调试活跃进程、结合源代码关联调查崩溃和死锁
name: gdb-cli description: "AI 代理的 GDB 调试助手 - 分析核心转储、调试活动进程、调查崩溃和死锁并关联源代码" category: development risk: critical source: community date_added: "2026-03-22" author: Cerdore tags:
- debugging
- gdb
- core-dump
- crash-analysis
- c++
- c tools:
- claude-code
- cursor
- gemini-cli
- codex-cli
- antigravity
GDB 调试助手
概述
专为 AI 代理设计的 GDB 调试技能。结合源代码分析和运行时状态检查,使用 gdb-cli 为 C/C++ 程序提供智能调试辅助。
何时使用此技能
- 分析核心转储或崩溃转储
- 使用 GDB attach 调试运行中的进程
- 调查崩溃、死锁或内存问题
- 获取带有源代码上下文的智能调试辅助
- 调试多线程应用程序
不使用此技能的场景
- 任务与 C/C++ 调试无关
- 用户需要无调试需求的通用辅助
- 没有可用的 GDB(需要 GDB 9.0+ 且支持 Python)
前置条件
# Install gdb-cli
pip install gdb-cli
# Or from GitHub
pip install git+https://github.com/Cerdore/gdb-cli.git
# Verify GDB has Python support
gdb -nx -q -batch -ex "python print('OK')"
要求:
- Python 3.6.8+
- GDB 9.0+ 且启用 Python 支持
- Linux 操作系统
工作流程
步骤 1:初始化调试会话
核心转储分析:
gdb-cli load --binary <binary_path> --core <core_path> [--gdb-path <gdb_path>]
活动进程调试:
gdb-cli attach --pid <pid> [--binary <binary_path>]
输出: 类似 "session_id": "a1b2c3" 的会话 ID。保存此 ID 用于后续命令。
步骤 2:收集初始信息
SESSION="<session_id>"
# List all threads
gdb-cli threads -s $SESSION
# Get backtrace (with local variables)
gdb-cli bt -s $SESSION --full
# Get registers
gdb-cli registers -s $SESSION
步骤 3:关联源代码(关键步骤)
对于回溯中的每一帧:
- 提取帧信息:
{file}:{line} in {function} - 读取源代码上下文:获取崩溃点前后 ±20 行
- 获取局部变量:
gdb-cli locals-cmd -s $SESSION --frame <N> - 分析:将代码逻辑与变量值关联
关联示例:
Frame #0: process_data() at src/worker.c:87
Source code shows:
85: Node* node = get_node(id);
86: if (node == NULL) return;
87: node->data = value; <- Crash here
Variables show:
node = 0x0 (NULL)
Analysis: The NULL check on line 86 didn't catch the issue.
步骤 4:深入调查
# Examine variables
gdb-cli eval-cmd -s $SESSION "variable_name"
gdb-cli eval-cmd -s $SESSION "ptr->field"
gdb-cli ptype -s $SESSION "struct_name"
# Memory inspection
gdb-cli memory -s $SESSION "0x7fffffffe000" --size 64
# Disassembly
gdb-cli disasm -s $SESSION --count 20
# Check all threads (for deadlock analysis)
gdb-cli thread-apply -s $SESSION bt --all
# View shared libraries
gdb-cli sharedlibs -s $SESSION
步骤 5:会话管理
# List active sessions
gdb-cli sessions
# Check session status
gdb-cli status -s $SESSION
# Stop session (cleanup)
gdb-cli stop -s $SESSION
常见调试模式
模式:空指针解引用
指标:
- 在内存访问指令处崩溃
- 指针变量为 0x0
调查:
gdb-cli registers -s $SESSION # Check RIP
gdb-cli eval-cmd -s $SESSION "ptr" # Check pointer value
模式:死锁
指标:
- 多个线程卡在锁函数中
- 回溯中出现
pthread_mutex_lock
调查:
gdb-cli thread-apply -s $SESSION bt --all
# Look for circular wait patterns
模式:内存损坏
指标:
- 在 malloc/free 中崩溃
- 变量中出现垃圾值
调查:
gdb-cli memory -s $SESSION "&variable" --size 128
gdb-cli registers -s $SESSION
示例
示例 1:核心转储分析
# Load core dump
gdb-cli load --binary ./myapp --core /tmp/core.1234
# Get crash location
gdb-cli bt -s a1b2c3 --full
# Examine crash frame
gdb-cli locals-cmd -s a1b2c3 --frame 0
示例 2:活动进程调试
# Attach to stuck server
gdb-cli attach --pid 12345
# Check all threads
gdb-cli threads -s b2c3d4
# Get all backtraces
gdb-cli thread-apply -s b2c3d4 bt --all
最佳实践
- 在从变量值得出结论之前始终阅读源代码
- 对大量线程或深层回溯使用
--range进行分页 - 在检查值之前使用
ptype了解复杂数据结构 - 对多线程问题检查所有线程
- 将类型与源代码定义交叉引用
安全与注意事项
- 此技能需要 GDB 访问进程和核心转储
- 附加到进程可能需要适当的权限(sudo、ptrace_scope)
- 核心转储可能包含敏感数据
兼容工具
Claude CodeCursor
标签
AI与机器学习