返回市场
麦克佩调试中心

麦克佩调试中心

作者:R-D-menasheof3 星标更新:2025-11-03

项目介绍

MCP Debug Hub

Build VSIX

mcp-debug-hub 是一个 VS Code 扩展,它通过模型上下文协议(MCP)暴露了 VS Code 的调试功能。它使 AI 编码助手(如 Cline、Claude、Cursor 或 Copilot)能够在 VS Code 内直接控制和检查调试会话,提供强大的调试自动化和检查能力。

主要特性

  • 调试会话控制:程序化地启动、停止、附加到进程并管理 VS Code 调试会话
  • 多进程调试:支持父进程与子进程层次结构的调试,包括子进程、工作者进程和派生进程
  • 智能上下文检测:自动使用 VS Code 调用堆栈视图中选择的帧进行检查操作
  • 断点管理:设置、移除和列出带有条件、命中次数和日志消息的断点
  • 代码执行控制:逐行执行代码、继续执行并在任何位置暂停
  • 运行时检查:评估表达式、检查变量和查看调用堆栈
  • 会话感知操作:在多进程场景中针对特定调试会话进行操作
  • 多语言支持:适用于 VS Code 调试适配器支持的任何语言
  • 内置状态视图:从活动栏监控服务器状态、活跃连接和指标。包括快速操作以控制服务器、复制 URL 和自动启动切换

需求

  • VS Code 版本 1.99.0 或更高版本
  • Node.js v22.x 或更高版本
  • 包含调试配置的工作区(在 launch.jsonworkspace.code-workspace 中)

快速开始

安装

从 VS Code 市场安装扩展或从源代码构建:

git clone https://github.com/R-D-menasheof/mcp-debug-hub.git
cd mcp-debug-hub
npm install
npm run vsix
code --install-extension dist/mcp-debug-hub.vsix

MCP 客户端配置

根据您使用的客户端进行配置。每个客户端的配置格式略有不同。

[!NOTE] 默认端口是 37337。您可以在 VS Code 设置中的 mcpDebugHub.ssePort 更改此设置。

MCP 客户端配置示例

<details> <summary>Cursor</summary>

前往 Cursor 设置 -> MCP -> 编辑配置(或直接编辑 ~/.cursor/mcp.json):

{
  "mcpServers": {
    "debug-mcp": {
      "url": "http://localhost:37337/mcp"
    }
  }
}
</details> <details> <summary>Cline</summary>

遵循 Cline MCP 文档 并添加以下配置:

{
  "mcpServers": {
    "debug-mcp": {
      "command": "node",
      "args": [],
      "transport": {
        "type": "sse",
        "url": "http://localhost:37337/mcp"
      }
    }
  }
}

确保正确配置 SSE 传输类型。

</details> <details> <summary>Continue</summary>

将配置添加到您的 Continue 配置文件 (~/.continue/config.json):

{
  "mcpServers": {
    "debug-mcp": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:37337/mcp"
      }
    }
  }
}
</details>

启动服务器

该扩展可以自动启动(在设置中配置 mcpDebugHub.autostart),或者手动启动:

  • 从活动栏打开 MCP Debug Hub 视图(层叠图标)
  • 点击 启动 按钮或启用 自动启动 切换
  • 或者使用命令面板:MCP Debug Hub: 启动

第一次提示

  1. 确保您的工作区中有调试配置(.vscode/launch.jsonworkspace.code-workspace
  2. 在您的 MCP 客户端中输入以下提示:
启动调试配置“Python: 当前文件”,并在 main.py 的第 10 行设置断点

您的 MCP 客户端应该启动调试会话并设置断点。

工具

<!-- 按功能组织工具类别 -->

工具参考

launch_debug

使用工作区设置中的命名配置启动新的调试会话(launch.json 或 workspace.code-workspace)。

参数:

  • configuration (字符串,必需):来自工作区设置的调试配置名称(例如,“Python: 当前文件”,“Node: 启动程序”)

示例:

{
  "configuration": "Python: 当前文件"
}

launch_child_debug

作为现有会话的子会话启动新的调试会话。对于调试多进程应用中的子进程、工作者或派生进程很有用。

参数:

  • parentSessionId (字符串,必需):父调试会话的 ID
  • configuration (字符串,必需):来自工作区设置的调试配置名称
  • consoleMode (字符串,可选):是否使用单独的控制台或合并到父控制台(默认:“separate”)。选项:“separate”,“merged”
  • lifecycleManagedByParent (布尔值,可选):生命周期(重启/停止)是否由父会话管理(默认:false)

示例:

{
  "parentSessionId": "abc123",
  "configuration": "Python: 工作者进程",
  "consoleMode": "merged",
  1: "lifecycleManagedByParent": true
}

attach_to_process

通过进程ID或进程名将调试器附加到已运行的进程中。

参数:

  • configuration (字符串,必需):具有 "request": "attach" 的类型为“attach”的调试配置名称
  • processId (数字,可选):要附加的进程ID。需要提供 processId 或 processName。
  • processName (字符串,可选):要附加的进程名(例如,“python3”,“node”)。需要提供 processId 或 processName。

示例:

{
  "configuration": "Python: 附加",
  "processId": 12345
}

stop_debug

停止调试会话并终止被调试的程序。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则停止当前活动会话

示例:

{
  "sessionId": "worker-123"
}

list_launch_configurations

列出工作区设置中的所有可用调试启动配置。

参数:

示例输出:

{
  "configurations": [
    { "name": "Python: 当前文件", "type": "python", "request": "launch" },
    { "name": "Python: 附加", "type": "python", "request": "attach" }
  ],
  "total": 2
}

get_debug_state

获取当前活动调试会话的详细信息,包括会话ID、状态和配置。

参数:

list_debug_sessions

列出所有活动调试会话及其层级信息。显示多进程调试场景中的父子关系。

参数:

示例输出:

{
  "sessions": [
    {
      "id": "main-123",
      "name": "Python: main.py",
      "type": "python",
      "state": "paused",
      "parent": null,
      "children": ["worker-456", "worker-789"]
    }
  ],
  "total": 3
}

get_session_hierarchy

以树形结构获取调试会话层级。有助于可视化多进程调试中的父子关系。

参数:

get_session_info

通过ID获取特定调试会话的详细信息。包括父级、子级、状态和会话元数据。

参数:

  • sessionId (字符串,必需):要获取信息的调试会话ID

示例:

{
  "sessionId": "worker-456"
}

set_breakpoint

在源文件的特定行设置断点,可选带有条件、命中次数或日志消息。

参数:

  • file (字符串,必需):源文件的绝对路径(例如,“/workspace/src/main.py”)
  • line (数字,必需):设置断点的行号(基于1,第一行是1)
  • condition (字符串,可选):可选条件表达式 - 断点仅在该表达式为真时触发(例如,“x > 10”)
  • hitCondition (字符串,可选):可选命中次数条件(例如,“>5”表示第五次命中后中断,“==3”表示仅在第三次命中时中断)
  • logMessage (字符串,可选):可选的日志消息,用于代替中断(日志点)。使用 {expression} 进行变量插值。

示例:

{
  "file": "/workspace/src/main.py",
  "line": 42,
  "condition": "x > 10"
}

set_breakpoints

一次性设置多个断点。返回每个断点的成功/失败状态。

参数:

  • breakpoints (数组,必需):要设置的断点数组(最小1,每批最大50)

示例:

{
  "breakpoints": [
    {
      "file": "/workspace/src/main.py",
      "line": 10
    },
    {
      "file": "/workspace/src/utils.py",
      "line": 25,
      "condition": "count > 5"
    }
  ]
}

remove_breakpoint

从源文件的特定行移除断点。

参数:

  • file (字符串,必需):包含要移除的断点的源文件的绝对路径
  • line (数字,必需):要移除的断点的行号(基于1)

list_breakpoints

列出当前工作区中设置的所有断点,包括它们的位置、条件和验证状态。

参数:

clear_all_breakpoints

清除工作区中所有文件的所有断点。

参数:

continue_execution

继续程序执行直到下一个断点被命中或程序终止。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

pause_execution

在当前执行点暂停正在运行的程序。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

step_over

跳过当前代码行,执行它而不进入任何函数调用。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

step_into

进入当前行上的函数调用,以调试被调用的函数内部。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

step_out

跳出当前函数,继续执行直到返回到调用函数。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

evaluate_expression

在暂停的调试会话上下文中评估表达式,并返回其结果。如果没有提供 frameId 或 threadId,则自动使用 VS Code 调用堆栈视图中选择的帧。

参数:

  • expression (字符串,必需):要评估的表达式(例如,“x + y”,“user.name”,“len(items)”)。
  • frameId (数字,可选):从 get_stack_frames 获取的堆栈帧ID。如果未提供,则使用调用堆栈视图中的活动帧。
  • threadId (数字,可选):线程ID。如果提供了 threadId 但没有 frameId,则使用该线程的顶层帧。
  • sessionId (字符串,可选):会话ID。如果未提供,则操作于当前活动调试会话。

示例:

{
  "expression": "user.name",
  "threadId": 1
}
{
  "expression": "len(items)",
  "frameId": 2
}

list_threads

列出调试会话中的所有线程及其ID和名称。在调用 get_stack_framesevaluate_expressionget_variables 之前使用此功能查看可用线程。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

示例输出:

{
  "threads": [
    { "id": 1, "name": "主线程" },
    { "id": 2, "name": "工作者-1" },
    { "id": 3, "name": "工作者-2" }
  ],
  "total": 3
}

get_stack_frames

获取当前调用堆栈帧,包括文件位置、行号和帧ID。可选指定要从中获取帧的线程,用于多线程调试。

参数:

  • threadId (数字,可选):可选的线程ID。如果省略,则返回第一个线程的堆栈帧。使用 list_threads 查看所有线程ID
  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

示例:

{
  "threadId": 2,
  "sessionId": "worker-123"
}

get_variables

获取当前作用域内的所有变量及其值,包括局部变量、全局变量和闭包变量。如果没有提供 frameId 或 threadId,则自动使用 VS Code 调用堆栈视图中选择的帧。

参数:

  • frameId (数字,可选):从 get_stack_frames 获取的堆栈帧ID。如果未提供,则使用调用堆栈视图中的活动帧。
  • threadId (数字,可选):线程ID。如果提供了 threadId 但没有 frameId,则使用该线程的顶层帧。
  • sessionId (字符串,可选):会话ID。如果未提供,则操作于当前活动调试会话。

示例:

{
  "threadId": 1
}
{
  "frameId": 2,
  "sessionId": "worker-123"
}

get_current_location

返回调试器当前暂停的确切文件路径、行号和列。在检查变量或评估表达式之前使用此功能了解当前执行上下文。可以针对多进程调试中的特定会话。

参数:

  • sessionId (字符串,可选):可选的会话ID。如果未提供,则操作于当前活动调试会话

配置

MCP Debug Hub 扩展支持以下 VS Code 设置中的配置选项:

  • mcpDebugHub.ssePort MCP SSE(服务器发送事件)服务器的端口号。AI 客户端如 Cursor、Continue 和 Cline 使用此端口连接进行调试。

    • 类型: 数字
    • 默认值: 37337
    • 范围: 1024-65535
  • mcpDebugHub.sseHost MCP SSE 服务器监听的主机地址。使用 'localhost' 进行本地连接或 '0.0.0.0' 允许远程连接。

    • 类型: 字符串
    • 默认值: "localhost"
  • mcpDebugHub.autostart 自动启动 MCP 服务器当 VS Code 打开时。禁