调试接口服务

GDB-MCP是一个提供GNU调试器(GDB)程序化访问的模型上下文协议(MCP)服务器,使AI模型和其他MCP客户端能够通过标准化接口与GDB交互,实现自然语言调试功能。

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

使用说明

GDB-MCP

https://github.com/user-attachments/assets/84e717ba-6983-442d-bf11-7ba2b17108af

GDB-MCP是一个模型上下文协议(MCP)服务器,提供对GNU调试器(GDB)的编程访问。它使AI模型和其他MCP客户端能够通过标准化的接口与GDB交互,从而通过自然语言交互访问调试功能。

由于它使用gdb/mi接口,您可以访问gdb的全部功能。我们还在参考资料中为gdb提供了一个命令参考。

特性

  • 会话管理:创建和管理多个隔离的GDB调试会话
  • 命令执行:执行CLI和MI(机器界面)GDB命令
  • 综合文档:通过MCP资源访问完整的GDB命令参考
  • 异步操作:基于asyncio构建,可实现高效的并发会话处理
  • 超时保护:自动清理空闲会话以防止资源泄漏

安装

先决条件

  • Python 3.12或更高版本
  • GDB已安装在您的系统上
  • MCP兼容客户端(例如Claude Desktop)

从源代码安装

# Clone the repository
git clone https://github.com/yourusername/gdb-mcp.git
cd gdb-mcp

# Install dependencies
pip install -r requirements.txt

# Install the package
pip install -e .

快速开始

运行服务器

# Start the MCP server
gdb-mcp

# Or run directly with Python
python -m gdb_mcp

Claude桌面配置

将以下内容添加到您的Claude Desktop配置文件中:

{
  "mcpServers": {
    "gdb-mcp": {
      "command": "gdb-mcp"
    }
  }
}

看 examples/claude_code_config_example.json 以获得完整的配置示例。

用法

可用资源

服务器通过MCP资源提供全面的GDB文档:

  • gdb://commands/reference -完整的GDB命令参考
  • gdb://commands/cli -带缩写的CLI命令
  • gdb://commands/mi -机器界面命令
  • gdb://commands/mapping -CLI到MI命令通信

可用工具

open -启动调试会话

{
  "name": "open",
  "arguments": {
    "timeout": 300  // Optional, defaults to 300 seconds
  }
}

call -执行GDB命令

{
  "name": "call",
  "arguments": {
    "id": "session-uuid",
    "command": "break main"
  }
}

close -关闭调试会话

{
  "name": "close",
  "arguments": {
    "id": "session-uuid"
  }
}

list_sessions -列出所有活动会话

{
  "name": "list_sessions",
  "arguments": {}
}

示例用法

基本调试会话

# Start a new debugging session
session = await client.call_tool("open", {})
session_id = session["content"]["id"]

# Load an executable
await client.call_tool("call", {
    "id": session_id,
    "command": "file /path/to/program"
})

# Set a breakpoint
await client.call_tool("call", {
    "id": session_id,
    "command": "break main"
})

# Run the program
result = await client.call_tool("call", {
    "id": session_id,
    "command": "run"
})

# Examine variables
result = await client.call_tool("call", {
    "id": session_id,
    "command": "print variable_name"
})

# Close the session
await client.call_tool("close", {"id": session_id})

访问文档

# Get CLI commands reference
cli_docs = await client.read_resource("gdb://commands/cli")

# Get MI commands reference
mi_docs = await client.read_resource("gdb://commands/mi")

建筑

GDB-MCP由几个关键组件组成:

  1. MCP服务器 (server.py)-处理客户端连接和请求路由
  2. GDB经理 (gdb_manager.py)-管理GDB子流程生命周期
  3. 会话管理 -维护具有自动超时功能的隔离调试会话
  4. 资源提供程序 -提供全面的GDB文档

服务器在内部以MI(机器接口)模式操作GDB,以实现可靠的命令解析和结构化输出。

发展

项目结构

gdb-mcp/
    src/gdb_mcp/
        __init__.py
        __main__.py
        cli.py              # CLI entry point
        server.py           # MCP server implementation
        gdb_manager.py      # GDB process management
    resources/
        gdb_commands.md     # GDB command reference
    docs/                   # Additional documentation
    examples/               # Usage examples
    tests/                  # Test suite
    scripts/                # Utility scripts

安全考虑

  • 仅设计用于本地调试
  • 每个GDB会话都在一个独立的进程中运行
  • 自动会话超时可防止资源泄漏
  • 文件系统访问仅限于用户权限

致谢