调试控制扩展

MCP Debug Hub 是一个 VS Code 扩展,通过 Model Context Protocol (MCP) 暴露 VS Code 的调试功能,使 AI 编码助手能够直接在 VS Code 中控制和检查调试会话。

  • by R-D-menasheof
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 R-D-menasheof/mcp-debug-hub

使用说明

MCP调试中心

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.json 或 workspace.code-workspace)

入门

安装

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

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客户端配置

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

[!注意]
默认端口为37337。您可以在VS代码设置中更改此设置 mcpDebugHub.ssePort.

MCP客户端配置示例

Cursor

首选 Cursor Settings -> MCP ->编辑配置(或直接编辑 ~/.cursor/mcp.json):

{
  "mcpServers": {
    "debug-mcp": {
      "url": "http://localhost:37337/mcp"
    }
  }
}
Cline

跟随 临床MCP文件 并添加此配置:

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

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

Continue

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

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

启动服务器

当VS Code打开时,扩展可以自动启动(配置 mcpDebugHub.autostart 在设置中),或手动使用:

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

您的第一个提示

  1. 确保工作区中有调试配置(.vscode/launch.json 或 workspace.code-workspace)
  2. 在MCP客户端中输入以下提示:
Launch the debug configuration "Python: Current File" and set a breakpoint at line 10 of main.py

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

工具

工具参考

launch_debug

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

参数:

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

例子:

{
  "configuration": "Python: Current File"
}

launch_child_debug

作为现有会话的子会话启动新的调试会话。可用于调试多进程应用程序中的子进程、工作进程或衍生进程。

参数:

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

例子:

{
  "parentSessionId": "abc123",
  "configuration": "Python: Worker Process",
  "consoleMode": "merged",
  "lifecycleManagedByParent": true
}

附件_流程

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

参数:

  • configuration (string,必填):连接类型调试配置的名称 "request": "attach"
  • processId (数字,可选):要附加到的进程ID。需要processId或processName。
  • processName (字符串,可选):要附加的进程名称(例如,“python3”、“node”)。需要processId或processName。

例子:

{
  "configuration": "Python: Attach",
  "processId": 12345
}

stop_debug

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

参数:

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

例子:

{
  "sessionId": "worker-123"
}

list_launch_configurations

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

参数: 无

输出示例:

{
  "configurations": [
    { "name": "Python: Current File", "type": "python", "request": "launch" },
    { "name": "Python: Attach", "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层次结构

以树结构获取调试会话层次结构。可用于在多进程调试中可视化父子关系。

参数: 无

get_session_info

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

参数:

  • sessionId (string,必填):用于获取信息的调试会话的ID

例子:

{
  "sessionId": "worker-456"
}

设断点

使用可选条件、命中计数或日志消息在源文件中的特定行设置断点。

参数:

  • file (string,必填):源文件的绝对路径(例如,“/workspace/src/main.py”)
  • line (number,必填):应设置断点的行号(从1开始,第一行为1)
  • condition (string,可选):可选条件表达式-断点仅在计算结果为true时触发(例如,“x>10”)
  • hitCondition (字符串,可选):可选的点击计数条件(例如,“>5”表示第5次点击后中断,“==3”表示仅在第3次点击时中断)
  • logMessage (string,可选):可选的日志消息输出,而不是中断(logpoint)。使用{expression}进行变量插值。

例子:

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

设置断点

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

参数:

  • breakpoints (数组,必填):要设置的断点数组(每批最少1个,最多50个)

例子:

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

移除断点

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

参数:

  • file (string,必填):包含要删除的断点的源文件的绝对路径
  • line (number,必填):要删除的断点的行号(从1开始)

列表_断点

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

参数: 无

清除所有断点

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

参数: 无

继续执行

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

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

执行不力

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

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

跨步

遍历当前代码行,在不输入任何函数调用的情况下执行它。可以在多进程调试中针对特定会话。

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

step_into

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

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

退出

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

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

求值表达式

在暂停的调试会话的上下文中计算表达式并返回其结果。如果未提供frameId/threadId,则自动使用在VS Code的“调用堆栈”视图中选择的帧。

参数:

  • expression (string,必填):要计算的表达式(例如,“x+y”、“user.name”、“len(items)”)。
  • frameId (数字,可选):堆栈帧ID来自 get_stack_frames。如果未提供,则使用“调用堆栈”视图中的活动帧。
  • threadId (number,可选):线程ID。如果没有提供frameId,则使用此线程的顶部框架。
  • sessionId (字符串,可选):会话ID。如果未提供,则对活动调试会话进行操作。

示例:

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

list_threads

列出调试会话中的所有线程及其ID和名称。在调用之前,使用此选项查看哪些线程可用 get_stack_frames, evaluate_expression,或 get_variables 与特定 threadId.

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

输出示例:

{
  "threads": [
    { "id": 1, "name": "MainThread" },
    { "id": 2, "name": "Worker-1" },
    { "id": 3, "name": "Worker-2" }
  ],
  "total": 3
}

get_stack_frames

获取当前调用堆栈帧,包括文件位置、行号和帧ID。可以选择指定从哪个线程获取帧以进行多线程调试。

参数:

  • threadId (number,可选):可选线程ID。如果省略,则返回第一个线程的堆栈帧。使用 list_threads 查看所有线程ID
  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

例子:

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

get_variables

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

参数:

  • frameId (数字,可选):堆栈帧ID来自 get_stack_frames。如果未提供,则使用“调用堆栈”视图中的活动帧。
  • threadId (number,可选):线程ID。如果没有提供frameId,则使用此线程的顶部框架。
  • sessionId (字符串,可选):会话ID。如果未提供,则对活动调试会话进行操作。

示例:

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

get_current _位置

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

参数:

  • sessionId (string,可选):可选会话ID。如果未提供,则对活动调试会话进行操作

配置

MCP调试中心扩展支持VS代码设置中的以下配置选项:

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

    • 类型: 数字
    • 违约: 37337
    • 范围: 1024-65535
  • mcpDebugHub.sseHost MCP SSE服务器将侦听的主机地址。使用“localhost”进行本地连接,或使用“0.0.0.0”允许远程连接。

    • 类型: 字符串
    • 违约: "localhost"
  • mcpDebugHub.autostart 打开VS Code时自动启动MCP服务器。禁用时,使用“MCP调试中心:启动服务器”命令手动启动。此设置也可以直接从MCP调试中心状态视图切换。

    • 类型: 布尔
    • 违约: false
  • mcpDebugHub.logLevel 记录详细程度。“debug”显示所有消息,“error”仅显示错误。查看“MCP调试中心”输出通道中的日志。

    • 类型: 字符串
    • 选择: debug, info, warn, error
    • 违约: "info"

更改端口

要使用其他端口,请更新您的VS Code设置:

{
  "mcpDebugHub.ssePort": 8080
}

然后更新您的MCP客户端配置以使用新端口。确切的格式取决于您的客户端:

对于光标:

{
  "mcpServers": {
    "debug-mcp": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

对于克莱恩:

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

继续:

{
  "mcpServers": {
    "debug-mcp": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:8080/mcp"
      }
    }
  }
}

概念

调试配置

该扩展使用工作区设置中的VS Code调试配置。配置可以存储在 .vscode/launch.json (单根工作区)或 workspace.code-workspace (多根工作区)。在使用MCP调试中心之前,您必须为项目设置至少一个调试配置。

示例 launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    }
  ]
}

断点验证

当您设置断点时,它可能处于“挂起”状态,直到调试会话到达可以验证它的代码。已验证的断点保证会被命中,而挂起的断点可能需要调整。

栈帧

堆栈帧表示暂停执行点处的调用堆栈。帧ID 0是当前(最顶部)帧。使用帧ID evaluate_expression 和 get_variables 检查调用堆栈的不同级别。

发展

从源头构建

git clone https://github.com/R-D-menasheof/mcp-debug-hub.git
cd mcp-debug-hub
npm install
npm run compile

在开发中运行

  1. 在VS Code中打开项目
  2. 按F5开始调试
  3. 将打开一个新的VS Code窗口,其中加载了扩展名
  4. 配置您的MCP客户端以连接到 http://localhost:37337/mcp

运行测试

npm test

已知限制

  • 该扩展需要一个具有调试配置的活动VS Code工作区
  • 一些调试适配器可能对某些功能(例如,条件断点)的支持有限
  • SSE传输要求MCP客户端支持服务器发送事件

贡献

欢迎投稿!请随时提交拉取请求。

许可证

看 许可证 文件以获取详细信息。

链接