一个提供给AI助手程序化访问GDB调试会话的MCP(模型上下文协议)服务器。这使得AI模型能够像VS Code和CLion这样的IDE一样与调试器交互,使用GDB/MI(机器接口)协议。
此服务器使用**GDB/MI(机器接口)**协议,这是专业IDE使用的同一接口。它提供了:
# 如果需要,请安装pipx
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# 安装gdb-mcp-server
cd /path/to/gdb-mcp
pipx install .
对于其他安装方法(虚拟环境、手动设置),请参见INSTALL.md。
在你的Claude Desktop配置文件中添加以下内容:
位置:
~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json配置:
{
"mcpServers": {
"gdb": {
"command": "gdb-mcp-server"
}
}
}
对于其他安装方法和MCP客户端,请参见INSTALL.md。
GDB MCP服务器支持以下环境变量:
GDB_PATH指定要使用的GDB可执行文件的路径。这在以下情况下很有用:
默认值:gdb(通过系统PATH解析)
示例:
export GDB_PATH=/usr/local/bin/gdb-13.2
gdb-mcp-server
注意:如果同时指定了gdb_start_session工具中的gdb_path参数,它将覆盖这个环境变量。
GDB_MCP_LOG_LEVEL设置服务器的日志级别。
默认值:INFO
选项:DEBUG, INFO, WARNING, ERROR, CRITICAL
示例:
export GDB_MCP_LOG_LEVEL=DEBUG
gdb-mcp-server
GDB MCP服务器提供了21个工具来控制GDB调试会话:
会话管理:
gdb_start_session - 使用可选初始化启动新的GDB会话gdb_execute_command - 执行任何GDB命令(CLI或MI)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。
用户:"加载位于/tmp/core.12345的核心转储,将sysroot设置为/opt/sysroot,并告诉我崩溃时有多少线程。"
AI操作:
{
"init_commands": [
"file /path/to/executable",
"core-file /tmp/core.12345",
"set sysroot /opt/sysroot"
]
}
gdb_get_threads用户:"在process_data处设置断点,但仅当count变量大于100时,然后继续执行。"
AI操作:
{
"location": "process_data",
"condition": "count > 100"
}
gdb_continue有关更详细的使用示例和工作流程,请参见examples/USAGE_GUIDE.md和examples/README.md。
创建一个.gdb文件,其中包含你的设置命令:
# setup.gdb
file /path/to/myprogram
core-file /path/to/core
# 设置符号路径
set sysroot /opt/sysroot
set solib-search-path /opt/libs:/usr/local/lib
# 方便设置
set print pretty on
set print array on
set pagination off
然后使用它:
{
"init_commands": ["source setup.gdb"]
}
你也可以使用GDB的Python API:
# init.py
import gdb
gdb.execute("file /path/to/program")
gdb.execute("core-file /path/to/core")
# 自定义分析
使用:
{
"init_commands": ["source init.py"]
}
虽然此服务器主要与核心转储和可执行文件一起工作,但你可以附加到正在运行的进程中:
{
"init_commands": [
"attach 12345" // 正在运行的进程的PID
]
}
注意:这需要适当的权限(通常是root或同一用户)。
未找到GDB
which gdb
gdb --version
超时错误/命令无响应
程序很可能仍在运行!当程序正在运行时,GDB忙于执行,不会响应其他命令。
解决方案:使用gdb_interrupt暂停正在运行的程序,然后其他命令将起作用。
程序状态:
gdb_execute_command与"run"或"start"gdb_interrupt暂停它gdb_continue,gdb_step,gdb_next,检查变量缺少调试符号
始终检查gdb_start_session响应中的warnings字段!编译程序时使用-g标志。
有关详细的故障排除、安装问题和其他解决方案,请参见INSTALL.md。
pygdbmi库来处理低级协议细节和响应解析。欢迎贡献!改进领域:
MIT