返回市场
调试器-mcp

调试器-mcp

作者:Govinda-Fichtner2 星标更新:2025-10-26

项目介绍

DAP MCP 服务器

CI 集成测试

使AI代理能够通过统一的MCP接口跨多种语言进行程序调试。


这是什么?

这是一个基于Rust的MCP(模型上下文协议)服务器,通过桥接到调试适配器协议(DAP),向AI助手(如Claude、Gemini CLI等)提供调试能力。

简而言之: AI代理可以在Python、Ruby、Node.js、Go和Rust中自主设置断点、逐步执行代码、检查变量并调查错误。


快速开始

1. 安装

Docker(推荐):

# 选择适合您语言的镜像
docker build -f Dockerfile.python -t debugger-mcp:python .
docker run -i debugger-mcp:python

本地安装:

cargo build --release
./target/release/debugger_mcp serve

2. 配置Claude桌面

{
  "mcpServers": {
    "debugger": {
      "command": "/path/to/debugger_mcp",
      "args": ["serve"]
    }
  }
}

3. 调试

从Claude开始调试!

详细设置: 入门指南


状态

🎉 生产就绪 - 多语言支持

支持的语言: Python、Ruby、Node.js、Go、Rust(全部100%功能)

持续集成

工作流目的最新状态
CI代码质量、安全性、单元测试(193个测试)CI
集成测试端到端AI调试:5种语言×2种AI客户端(Claude Code + Codex)集成测试

集成测试做了什么: 实际的AI代理(Claude Code和Codex)通过MCP自主调试程序,在所有语言中验证每个测试中的8个调试操作。

最新结果(10/10测试通过):

语言Claude CodeCodex操作
Python✅ 通过✅ 通过SBCTED
Ruby✅ 通过✅ 通过SBCTED
Node.js✅ 通过✅ 通过SBCTED
Go✅ 通过✅ 通过SBCTED
Rust✅ 通过✅ 通过SBCTED

图例: S=会话启动,B=断点,C=继续,T=跟踪,E=评估,D=断开连接

理解CI: 查看CI工作流文档


功能

支持的语言

语言调试器Docker镜像
PythondebugpyDockerfile.python
RubyrdbgDockerfile.ruby
Node.jsvscode-js-debugDockerfile.nodejs
GodelveDockerfile.go
RustCodeLLDBDockerfile.rust

调试能力

当前:

  • 启动/停止调试会话
  • 设置源代码断点
  • 执行控制(继续、单步跳过/进入/跳出、暂停)
  • 表达式求值
  • 堆栈跟踪检查
  • 变量检查

计划:

  • 条件断点及日志点
  • 异常断点
  • 多线程调试
  • 远程调试
  • 数据断点

架构

AI代理(Claude、Gemini等)
    ↕ MCP协议(JSON-RPC)
┌──────────────────────────────────┐
│   DAP MCP服务器(Rust/Tokio)   │
│ ┌─────────────────────────────┐  │
│ │  MCP层(工具/资源)│  │
│ └──────────┬──────────────────┘  │
│ ┌──────────┴──────────────────┐  │
│ │  无语言核心                 │  │
│ └──────────┬──────────────────┘  │
│ ┌──────────┴──────────────────┐  │
│ │  DAP协议客户端              │  │
│ └─────────────────────────────┘  │
└──────────┼───────────────────────┘
           ↕ 调试适配器协议
    ┌──────┴──────┐
debugpy  rdbg  delve  CodeLLDB
(Python)(Ruby) (Go)  (Rust/C++)

深入了解: 架构提案


使用示例

用户:"我的Python脚本崩溃了。你能调试一下吗?"

Claude:
  → debugger_start(language="python", program="/workspace/script.py")
  → debugger_set_breakpoint(sourcePath="/workspace/script.py", line=42)
  → debugger_continue()
  → debugger_wait_for_stop()
  [程序在断点处停止]
  → stack = debugger_stack_trace()
  → debugger_evaluate(expression="user_data")

  "崩溃的原因是当fetch_user()失败时,'user_data'为None。
   代码在访问user_data.name之前没有检查是否为None..."

按语言表达式语法: 表达式指南


常见问题

❓ 断点未验证? → 确保有调试符号:对于rustc/gcc使用-g标志,Python使用debugpy → 检查源路径是否完全匹配

❓ 会话超时? → 确认已安装调试器:pip install debugpygem install debug等 → 检查调试器是否在PATH中

❓ Docker路径问题? → 使用容器路径:/workspace/...(而不是主机路径如/home/user/...) → 确保卷正确挂载

完整指南: 故障排除文档


文档

按用例分类

🚀 刚开始?入门指南

🐳 使用Docker部署?Docker部署指南

🏗️ 理解架构?架构提案

➕ 添加新语言?添加新语言指南

✅ 理解CI/CD?CI工作流

🐛 故障排除问题?故障排除指南

🧪 编写测试?测试指南

文档结构

  • 架构/ - 系统设计、组件、技术决策
  • 贡献/ - 开发者指南、测试、设置
  • 使用/ - 部署、Docker、表达式、故障排除
  • 流程/ - CI/CD、发布、跨平台构建

完整索引: docs/README.md


开发

先决条件

  • Rust 1.70+ (rustup update)
  • Docker(用于集成测试)
  • 语言特定的调试器(用于测试):
    • Python:pip install debugpy
    • Ruby:gem install debug
    • Node.js:npm install -g node-debug2

构建与测试

# 克隆
git clone https://github.com/Govinda-Fichtner/debugger-mcp.git
cd debugger-mcp

# 安装预提交钩子(推荐)
pre-commit install --install-hooks
pre-commit install --hook-type commit-msg
pre-commit install --hook-type pre-push

# 构建
cargo build --release

# 运行单元测试
cargo test

# 运行集成测试(需要调试器)
cargo test --test '*integration*' -- --ignored

预提交钩子

在提交/推送前运行自动质量检查:

  • 格式化(cargo fmt
  • 代码检查(cargo clippy
  • 单元测试
  • 安全扫描(gitleakscargo-audit
  • 代码覆盖率(最低60%)

设置: 预提交指南


贡献

我们欢迎贡献!查看入门指南以了解:

  • 开发设置
  • 架构概述
  • 测试指南
  • 代码风格

贡献流程:

  1. 分叉仓库
  2. 创建功能分支
  3. 带有测试的更改
  4. 运行pre-commit run --all-files
  5. 提交拉取请求

发展路线图

✅ 已完成阶段

  • 第0阶段: 研究与架构
  • 第1阶段: MVP - Python支持
  • 第2阶段: Ruby验证
  • 第3阶段: 多语言支持(Python、Ruby、Node.js、Go、Rust)

🚧 当前阶段

第4阶段:生产特性

  • 条件断点
  • 异常处理
  • 安全加固
  • 性能优化

📅 未来阶段

第5阶段:社区

  • 开源发布
  • 插件API
  • VS Code扩展
  • 额外语言(Java、C#、PHP)

技术栈

组件技术理由
语言Rust内存安全、性能、异步
命令行界面Clap行业标准、派生宏
异步运行时Tokio经验丰富的、全面的
序列化serde + serde_json事实上的标准
错误处理anyhow + thiserror人体工程学、清晰的消息
日志记录tracing结构化的、异步感知的

许可证

待定(可能是MIT或Apache 2.0)


使用❤️和🦀用Rust构建

最后更新:2025-10-19