使用说明
GDB MCP服务器
一个MCP(模型上下文协议)服务器,为AI助手提供对GDB调试会话的编程访问。这允许AI模型使用GDB/MI(机器接口)协议,以与VS Code和CLion等IDE相同的方式与调试器交互。
特性
- 完全GDB控制:启动会话、执行命令、控制程序执行
- 线程分析:检查线程,获取回溯,分析线程状态
- 断点管理:设置条件断点、临时断点
- 计量检验:计算表达式,检查变量和寄存器
- 堆芯分析:使用自定义初始化加载和分析核心转储
- 灵活初始化:启动时运行GDB脚本或命令
建筑
此服务器使用 GDB/MI(机器接口) 该协议与专业IDE使用的接口相同。它提供:
- 结构化、机器可解析的输出
- 完全访问GDB的调试功能
- 可靠的命令执行和响应处理
安装
先决条件
- Python 3.10或更高版本
- GDB已安装并在PATH中可用
快速开始
# Install pipx if needed
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Install gdb-mcp-server
cd /path/to/gdb-mcp
pipx install .
有关替代安装方法(虚拟环境、手动设置),请参阅 安装.md.
配置
克劳德桌面版
将此添加到您的Claude Desktop配置文件中:
地点:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
配置:
{
"mcpServers": {
"gdb": {
"command": "gdb-mcp-server"
}
}
}
有关其他安装方法和MCP客户端,请参阅 安装.md.
环境变量
GDB MCP服务器支持以下环境变量:
GDB_PATH
指定要使用的GDB可执行文件的路径。这在以下情况下很有用:
- 您安装了多个GDB版本
- GDB安装在非标准位置
- 您想使用自定义或修补的GDB构建
默认: gdb (通过系统路径解决)
示例:
export GDB_PATH=/usr/local/bin/gdb-13.2
gdb-mcp-server
备注:The gdb_path 参数在 gdb_start_session 如果同时指定了这两个环境变量,则工具会覆盖此环境变量。
GDB_MCP_LOG_LEVEL
设置服务器的日志记录级别。
默认: INFO
选项: DEBUG, INFO, WARNING, ERROR, CRITICAL
示例:
export GDB_MCP_LOG_LEVEL=DEBUG
gdb-mcp-server
可用工具
GDB MCP服务器提供22个工具来控制GDB调试会话:
会话管理:
gdb_start_session-使用可选初始化启动新的GDB会话gdb_execute_command-执行GDB命令(CLI或MI格式)gdb_call_function-调用目标进程中的函数(用于单独许可的专用工具)gdb_get_status-获取当前会话状态gdb_stop_session-停止当前会话
线程和帧导航:
gdb_get_threads-列出所有线程gdb_select_thread-选择特定线程gdb_get_backtrace-获取线程的堆栈跟踪gdb_select_frame-选择特定的堆栈框架gdb_get_frame_info-获取当前帧的信息
断点管理:
gdb_set_breakpoint-使用可选条件设置断点gdb_list_breakpoints-列出所有具有结构化数据的断点gdb_delete_breakpoint-按数字删除断点gdb_enable_breakpoint-启用断点gdb_disable_breakpoint-禁用断点
执行控制:
gdb_continue-继续执行gdb_step-进入功能gdb_next-跨步功能gdb_interrupt-暂停正在运行的程序
数据检查:
gdb_evaluate_expression-计算表达式gdb_get_variables-获取局部变量gdb_get_registers-获取CPU寄存器
有关每个工具的详细文档,包括参数、返回值和示例,请参阅 TOOLS.md.
使用示例
示例1:分析堆芯
用户:“在/tmp/core.12345加载核心转储,将sysroot设置为/opt/sysroot,并告诉我崩溃时有多少线程。”
AI行动:
- 使用init命令启动会话:
{
"init_commands": [
"file /path/to/executable",
"core-file /tmp/core.12345",
"set sysroot /opt/sysroot"
]
}
- 获取线程:
gdb_get_threads - 报告:“程序崩溃时有8个线程。”
示例2:条件断点调查
用户:“在process_data处设置断点,但仅当计数变量大于100时,然后继续执行。”
AI行动:
- 设置条件断点:
{
"location": "process_data",
"condition": "count > 100"
}
- 继续执行:
gdb_continue - 被击中时,检查状态
有关更详细的使用示例和工作流,请参阅 示例/用法_GUIDE.md 和 示例/README.md.
高级用法
自定义GDB初始化脚本
创建一个 .gdb 使用安装命令创建文件:
# setup.gdb
file /path/to/myprogram
core-file /path/to/core
# Set up symbol paths
set sysroot /opt/sysroot
set solib-search-path /opt/libs:/usr/local/lib
# Convenience settings
set print pretty on
set print array on
set pagination off
然后使用它:
{
"init_commands": ["source setup.gdb"]
}
Python初始化脚本
您还可以使用GDB的Python API:
# init.py
import gdb
gdb.execute("file /path/to/program")
gdb.execute("core-file /path/to/core")
# Custom analysis
配合使用:
{
"init_commands": ["source init.py"]
}
处理正在运行的进程
虽然此服务器主要用于核心转储和可执行文件,但您可以附加到正在运行的进程:
{
"init_commands": [
"attach 12345" // PID of running process
]
}
注意:这需要适当的权限(通常是root或同一用户)。
故障排除
常见问题
未找到GDB
which gdb
gdb --version
超时错误/命令未响应
该程序可能仍在运行!当程序运行时,GDB正忙,不会响应其他命令。
解决方案: 使用 gdb_interrupt 暂停正在运行的程序,然后其他命令将工作。
项目状态:
- 未开始:使用
gdb_execute_command使用“运行”或“启动” - 跑步:程序正在执行-使用
gdb_interrupt暂停它 - 已暂停 (在断点处):使用
gdb_continue,gdb_step,gdb_next,检查变量 - 完成:程序已退出-如果需要,请使用“run”重新启动
缺少调试符号
始终检查 warnings 字段在 gdb_start_session 回应!使用编译程序 -g 旗帜。
有关详细的故障排除、安装问题和更多解决方案,请参阅 安装.md.
运作原理
-
GDB/MI协议:服务器使用机器接口(MI)协议与GDB通信,该协议与IDE使用的接口相同。
-
pygdbmi库:我们使用优秀的
pygdbmi用于处理低级协议细节和响应解析的库。 -
MCP集成:服务器将GDB功能作为MCP工具公开,允许AI助手:
- 了解可用的调试操作
- 使用适当的参数执行命令
- 解释结构化响应
-
会话管理:每个服务器实例维护一个GDB会话,允许跨多个工具调用进行有状态调试。
贡献
欢迎投稿!需要改进的地方:
- 其他GDB命令(例如,监视点、内存检查)
- 更好的错误处理和恢复
- 增强的输出格式
许可证
麻省理工学院
