You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否开发VS Code扩展获取调试器状态变化通知?

如何编写监听VS Code调试器状态变化的扩展?

完全可以实现,而且不需要用到@vscode/debugadapter或vscode-debugprotocol——这两个包是给开发调试适配器(比如Python官方调试器这类工具)用的,普通扩展监听调试状态直接用VS Code原生的Extension API就够了。

核心实现逻辑

VS Code的vscode.debug模块提供了两个关键事件,正好匹配你的需求:

  • onDidStartDebugSession:调试会话启动时触发
  • onDidTerminateDebugSession:调试会话结束时触发

完整代码示例

下面是一个最小化的扩展实现,可监听全局调试状态,也能过滤特定类型(比如Python)的调试会话:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    // 监听调试启动事件
    const startListener = vscode.debug.onDidStartDebugSession(session => {
        console.log('DebuggingStarted');
        // 仅针对Python调试的自定义逻辑
        if (session.type === 'python') {
            vscode.window.showInformationMessage('Python调试会话已启动');
            // 在这里执行你的业务逻辑
        }
    });

    // 监听调试结束事件
    const terminateListener = vscode.debug.onDidTerminateDebugSession(session => {
        console.log('DebuggingEnded');
        if (session.type === 'python') {
            vscode.window.showInformationMessage('Python调试会话已结束');
        }
    });

    // 注册监听器,确保扩展卸载时自动清理资源
    context.subscriptions.push(startListener, terminateListener);
}

export function deactivate() {}

关键细节说明

  • 会话过滤:通过session.type可以精准监听特定语言/工具的调试会话,常见值包括python、node、cppdbg等
  • 内存管理:必须将监听器添加到context.subscriptions,避免扩展卸载时残留内存泄漏
  • 触发时机:onDidStartDebugSession在调试会话完全初始化后触发,onDidTerminateDebugSession在会话正常结束或强制终止时都会触发

内容的提问来源于stack exchange,提问作者0xDEADBEEF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:45:06