vscode.debug API

本文档详细介绍了调试命名空间中的各种功能,包括活动调试会话、断点管理、事件监听以及调试配置提供程序的注册等。核心API如startDebugging、stopDebugging和addBreakpoints等,支持启动调试、停止调试和操作断点。此外,还涉及了如何与调试适配器交互的接口,如注册DebugAdapterDescriptorFactory和DebugAdapterTrackerFactory。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    /**
     * 调试功能的命名空间
     */
    export namespace debug {

        /**
         * 当前活动的调试会话或“未定义”。活动调试会话就是其中之一
         * 由调试操作浮动窗口或调试操作浮动窗口的下拉菜单中当前显示的窗口表示。
         * 如果没有活动的调试会话,该值是' undefined '。
         */
        export let activeDebugSession: DebugSession | undefined;

        /**
         * 当前活动的调试控制台。
         * 如果没有活动的调试会话,则不会显示发送到调试控制台的输出。
         */
        export let activeDebugConsole: DebugConsole;

        /**
         * 断点列表。
         */
        export let breakpoints: Breakpoint[];

        /**
         * 活动调试会话时触发的事件已经改变了。
         * 请注意,当活动调试会话更改为' undefined '时,也会触发该事件。
         */
        export const onDidChangeActiveDebugSession: Event<DebugSession | undefined>;

        /**
         * 启动新的调试会话时触发的事件。
         */
        export const onDidStartDebugSession: Event<DebugSession>;

        /**
         * 当从调试会话接收到自定义DAP事件时触发的事件。
         */
        export const onDidReceiveDebugSessionCustomEvent: Event<DebugSessionCustomEvent>;

        /**
         * 调试会话结束时触发的事件。
         */
        export const onDidTerminateDebugSession: Event<DebugSession>;

        /**
         * 添加、删除或更改一组断点时发出的事件。
         */
        export const onDidChangeBreakpoints: Event<BreakpointsChangeEvent>;

        /**
         * 为特定的调试类型注册调试配置提供程序。
         * 可选的triggerKind可以用来指定何时触发提供程序的' provideDebugConfigurations '方法。
         * 当前可能有两种触发器类型:带有' Initial '值(或者如果没有给定触发器类型参数)的' provideDebugConfigurations '方法用于提供要复制到新创建的launch.json中的初始调试配置。
         * 对于触发器类型' Dynamic ', ' provideDebugConfigurations '方法用于动态地决定呈现给用户的调试配置(除了launch.json中的静态配置)。
         * 请注意,' triggerKind '参数只适用于' provideDebugConfigurations '方法:所以' resolveDebugConfiguration '方法根本不受影响。
         * 将单个提供者注册为针对不同触发器类型的解析方法,将导致多次调用相同的解析方法。
         * 可以为同一类型注册多个提供者。
         *
         * @param type 提供程序为其注册的调试类型。
         * @param provider 要注册的调试配置提供程序。
         * @param triggerKind 为其注册提供程序的“提供调试配置”方法的触发器。如果“触发类型”缺失,则值“调试配置提供程序触发类型”。最初的假设。
         * @return 释放时取消注册此提供程序的disposable对象。
         */
        export function registerDebugConfigurationProvider(debugType: string, provider: DebugConfigurationProvider, triggerKind?: DebugConfigurationProviderTriggerKind): Disposable;

        /**
         * 为特定的调试类型注册一个调试适配器描述符工厂。
         * 扩展只允许为扩展定义的调试类型注册调试适配器描述符工厂。
         * 否则将抛出一个错误。
         * 为一个调试类型注册多个调试适配器描述符工厂会导致错误。
         *
         * @param debugType 工厂注册的调试类型。
         * @param factory 要注册的debug适配器描述符工厂。
         * @return 丢弃时取消该工厂的注册。
         */
        export function registerDebugAdapterDescriptorFactory(debugType: string, factory: DebugAdapterDescriptorFactory): Disposable;

        /**
         * 为给定的调试类型注册一个调试适配器跟踪工厂。
         *
         * @param debugType 工厂注册的调试类型,或匹配所有调试类型的' '。
         * @param factory 要注册的调试适配器跟踪工厂。
         * @return 丢弃时取消该工厂的注册。
         */
        export function registerDebugAdapterTrackerFactory(debugType: string, factory: DebugAdapterTrackerFactory): Disposable;

        /**
         * 通过使用命名启动或命名复合配置,或者直接传递一个[Debug configuration](# Debug configuration)来启动调试。
         * 命名的配置在'.vscode/launch '中查找。json `在给定的文件夹中找到。
         * 在开始调试之前,将保存所有未保存的文件,并更新启动配置。
         * 在配置中使用的文件夹特定变量(例如:` ${workspace Folder} `)在给定文件夹下解析。
         * 
         * @param folder workspace folder用于查找命名的配置和解析变量,或者“undefined”用于非文件夹设置。
         * @param nameOrConfiguration 调试或复合配置的名称,或debug configuration对象的名称。
         * @param parentSessionOrOptions 调试会话的选项。当传递父会话debug session时,假定只有这个父会话的选项。
         * @return 当调试可以成功启动时解析的thenable。
         */
        export function startDebugging(folder: WorkspaceFolder | undefined, nameOrConfiguration: string | DebugConfiguration, parentSessionOrOptions?: DebugSession | DebugSessionOptions): Thenable<boolean>;

        /**
         * 停止给定的调试会话,或者如果忽略了会话,停止所有的调试会话。
         * 
         * @param session 停止[ebug session;如果省略,所有会话将停止。
         */
        export function stopDebugging(session?: DebugSession): Thenable<void>;

        /**
         * 添加断点。
         * 
         * @param breakpoints 要添加的断点。
        */
        export function addBreakpoints(breakpoints: Breakpoint[]): void;

        /**
         * 删除断点。
         * 
         * @param breakpoints 要删除的断点。
         * 
         */
        export function removeBreakpoints(breakpoints: Breakpoint[]): void;

        /**
         * 将调试适配器协议接收到的“源”描述符对象转换为可用于加载其内容的Uri。
         * 如果源描述符基于路径,则返回一个文件Uri。
         * 如果源描述符使用一个引用号,就会构造一个特定的调试Uri (scheme 'debug'),它需要一个对应的VS Code内容提供者和一个运行的调试会话
         * 
         * 如果“源”描述符没有足够的信息来创建Uri,则抛出一个错误。
         *
         * @param source 一个符合调试适配器协议中定义的源类型的对象。
         * @param session 一个可选的调试会话,当源描述符使用引用号从活动调试会话加载内容时将使用该会话。
         * @return 可用于加载源文件内容的uri。
         */
        export function asDebugSourceUri(source: DebugProtocolSource, session?: DebugSession): Uri;
    }
<think>好的,用户现在想了解如何在VSCode中进行远程调试。之前他们问过关于dlv远程调试Go程序的问题,现在可能希望将类似的流程应用到VSCode环境中,特别是针对Go项目。用户可能是开发人员,正在使用VSCode作为主要编辑器,需要远程调试运行在另一台机器上的服务,比如测试服务器或生产环境中的问题复现。 首先,我需要确认VSCode的远程调试配置步骤。用户可能已经熟悉了dlv的命令行用法,但需要图形化界面更直观的操作。需要确保他们正确配置了launch.json文件,包括指定远程主机的IP和调试端口,以及本地和远程路径的映射,这有助于源代码的正确匹配。 然后,要考虑到用户可能的痛点,比如配置错误、连接问题或断点不生效。常见问题可能包括防火墙设置、调试符号缺失或路径映射不正确。需要提醒用户检查这些方面,尤其是路径映射,因为如果远程和本地的代码路径不一致,断点可能无法命中。 另外,用户可能没有安装必要的VSCode扩展,比如Go扩展和Delve插件。需要指导他们安装这些工具,并确保版本兼容性。同时,安全方面的问题也需要提及,比如在公共网络上开放调试端口的风险,建议只在可信网络中使用,并调试结束后关闭服务。 还需要比较之前dlv命令行调试和VSCode远程调试的异同,强调图形化界面的便利性,比如可视化的断点设置、变量查看和调用堆栈跟踪。这些对于习惯IDE的用户来说更加友好。 最后,可能需要给出一个具体的示例配置,帮助用户更好地理解如何修改launch.json文件,以及如何启动远程调试服务端。同时,常见问题解决部分应该简明扼要,覆盖用户可能遇到的典型问题,如连接失败、权限问题等,并提供相应的解决命令或步骤。</think>以下是通过 Visual Studio Code 实现远程调试的详细指南: --- ### 一、核心原理 通过 `dlv` 调试器建立本地 VSCode 与远程程序的通信,实现: - 断点设置 - 变量监控 - 堆栈跟踪 - 代码热更新 --- ### 二、环境准备 1. **远程机器** ```bash # 安装 delve go install github.com/go-delve/delve/cmd/dlv@latest # 编译带调试信息的程序 go build -gcflags="all=-N -l" -o myapp main.go ``` 2. **本地 VSCode** - 安装官方 [Go 扩展](https://marketplace.visualstudio.com/items?itemName=golang.go) - 安装 [Delve 插件](https://github.com/golang/vscode-go/wiki/debugging) --- ### 三、配置流程 #### 步骤 1:远程启动调试服务 ```bash # 方式一:调试运行中的程序 dlv attach <PID> --headless --listen=:2345 --api-version=2 # 方式二:直接启动程序 dlv exec ./myapp --headless --listen=:2345 --api-version=2 ``` #### 步骤 2:本地 VSCode 配置 1. 创建 `.vscode/launch.json`: ```json { "version": "0.2.0", "configurations": [ { "name": "Remote Debug", "type": "go", "request": "attach", "mode": "remote", "remotePath": "/absolute/path/on/remote/server", // 远程代码路径 "port": 2345, "host": "1.2.3.4", // 远程服务器IP "cwd": "${workspaceFolder}", "showLog": true } ] } ``` --- ### 四、调试操作 1. **设置断点**:在代码行号左侧点击添加 2. **启动调试**:按 F5 或点击调试侧边栏 ▶️ 按钮 3. **功能面板**: - 变量监控(Variables) - 调用堆栈(Call Stack) - 断点管理(Breakpoints) - 交互式调试控制(Continue/Step Over/Step Into) --- ### 五、路径映射技巧 当本地与远程路径不一致时: ```json "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "/remote/code/path" } ] ``` --- ### 六、常见问题排查 | 现象 | 解决方案 | |--------------------|--------------------------------------------------------------------------| | 断点不生效 | 1. 检查路径映射是否准确<br>2. 确认编译时包含调试符号 | | 连接超时 | 1. 检查防火墙设置<br>2. 确认远程 `dlv` 服务已启动 | | 变量显示异常 | 1. 升级 delve 版本<br>2. 检查编译器优化选项 | | 调试会话断开 | 添加 `--accept-multiclient` 参数允许多次连接 | --- ### 七、生产环境建议 - 🔐 使用 SSH 隧道加密通信: ```bash ssh -L 2345:localhost:2345 user@remote-host ``` - ⏱️ 调试完成后立即关闭调试端口 - 📦 通过 Docker 调试时需添加 `--security-opt seccomp=unconfined` 参数 --- 通过此方案,您可以在本地获得与调试本地程序相同的 IDE 体验,同时实际代码运行在远程服务器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值