GDB调试服务

一个提供AI助手程序化访问GDB调试会话的MCP服务器,使AI模型能够像VS Code和CLion等IDE一样与调试器交互。

  • by Ipiano
  • Python
  • 本地部署
  • 51 星标
  • 更新于
在 GitHub 查看 Ipiano/gdb-mcp

使用说明

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行动:

  1. 使用init命令启动会话:
{
  "init_commands": [
    "file /path/to/executable",
    "core-file /tmp/core.12345",
    "set sysroot /opt/sysroot"
  ]
}
  1. 获取线程: gdb_get_threads
  2. 报告:“程序崩溃时有8个线程。”

示例2:条件断点调查

用户:“在process_data处设置断点,但仅当计数变量大于100时,然后继续执行。”

AI行动:

  1. 设置条件断点:
{
  "location": "process_data",
  "condition": "count > 100"
}
  1. 继续执行: gdb_continue
  2. 被击中时,检查状态

有关更详细的使用示例和工作流,请参阅 示例/用法_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.

运作原理

  1. GDB/MI协议:服务器使用机器接口(MI)协议与GDB通信,该协议与IDE使用的接口相同。

  2. pygdbmi库:我们使用优秀的 pygdbmi 用于处理低级协议细节和响应解析的库。

  3. MCP集成:服务器将GDB功能作为MCP工具公开,允许AI助手:

    • 了解可用的调试操作
    • 使用适当的参数执行命令
    • 解释结构化响应
  4. 会话管理:每个服务器实例维护一个GDB会话,允许跨多个工具调用进行有状态调试。

贡献

欢迎投稿!需要改进的地方:

  • 其他GDB命令(例如,监视点、内存检查)
  • 更好的错误处理和恢复
  • 增强的输出格式

许可证

麻省理工学院

参考文献