windows wsl2 vscode golang debug不生效问题排查

本文主要介绍了在Windows的WSL2环境下,使用VSCode进行Golang开发时遇到的代码断点不生效和单元测试无法命中断点的问题。首先,由于代码通过软链接映射到Linux,导致断点设置失败,通过修改launch.json的日志配置,发现并解决了软链接问题。然而,即使断点问题解决,运行单元测试时仍无法命中断点。进一步分析发现,这涉及到settings.json中的配置,也需要添加相应的软链接设置才能使调试正常工作。

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

现象1,golang代码断点不生效

golang vscode点击Run-> Start Debugging后,看到正常的debug 调用dlv-dap,但是没有命中断点。
原因是我用的wsl2 remote, 默认代码保存在windows上,在wsl里看到的是/mnt/c/xxx的目录,为了在linux中方便使用建立了软连接。最后导致打断点时日志报找不到go文件。

排查思路:
1、在.vscode/launch.json中开启日志详情

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "debugAdapter": "dlv-dap",
            "request": "launch",
            "mode": "auto",
            "program": "${fileDirname}",
            "trace": "verbose", // 日志详细打印
        }
    ]
}

然后再点debug执行,看到debug console里报如下错误
Error create Breakpoint,… no go file in /xxxx/xxxx/

查询github issue, 发现时软链接导致的,所以添加如下配置。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "debugAdapter": "dlv-dap",
            "request": "launch",
            "mode": "auto",
            "program": "${fileDirname}",
            "trace": "verbose",
            // 添加配置
            "substitutePath": [
                {
                 "from": "/you/soft/link/path/",  // 软链路径
                 "to": "/mnt/c/Users/xxx/real/path/",  //实际路径
                },
            ]
           
        }
    ]
}

配置完成后再点debug断点可以工作了。

现象2, 在现象1修复后,发现执行go 单元测试,右键 debug test时仍然无法命中断点

原因分析:
golang 单元测试,调用的配置文件时settings.json, 需要同样添加软链配置

{
    "go.delveConfig": {
        "showLog": true,
        "debugAdapter": "legacy",
        "substitutePath": [
            {
             "from": "/you/soft/link/path/",  // 软链路径
             "to": "/mnt/c/Users/xxx/real/path/",  //实际路径
            },
        ]
    },
    "go.testEnvVars": {
        "CGO_ENABLED": "0"
    },
    "gopls": {
    },
}
### 配置WSL环境下VSCode调试Docker容器 #### 一、安装并配置Docker 为了能够在WSL环境中顺利使用Docker,需先完成Docker的安装。对于Windows用户来说,推荐通过官方渠道下载适用于Windows系统的Docker Desktop版本[^2]。安装过程中会自动设置好与WSL2之间的交互支持。 确保已将当前用户名添加到docker用户组以便无需sudo即可操作docker命令,在Ubuntu下可通过`sudo usermod -aG docker $USER`实现这一点。 #### 二、准备Docker镜像及容器 创建适合开发需求的基础镜像文件(如Dockerfile),其中应包含编译工具链以及必要的依赖库。之后利用此Dockerfile来构建自定义镜像,并启动相应的容器实例用于后续测试或部署工作。 针对C++项目而言,可以在Dockerfile中指定GCC或其他所需编译器作为基础环境的一部分[^1]。 #### 三、安装Visual Studio Code及其扩展包 前往微软应用商店获取最新版Visual Studio Code编辑器;接着打开软件内部市场搜索栏输入关键词“Remote - Containers”,找到由Microsoft官方维护的相关远程开发插件集进行安装[^3]。 该套件允许开发者直接连接至正在运行中的Linux容器内执行代码编写、终端控制台互动等功能,极大地方便了跨平台项目的协作流程管理。 #### 四、配置launch.json以启用调试功能 在目标工程目录下的`.vscode`文件夹里新建名为`launch.json`的JSON格式文档,按照如下模板填写相应字段: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch inside WSL Docker Container", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/app", "args": [], "stopAtEntry": false, "cwd": "/app", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Build Inside Docker", "miDebuggerPath": "/usr/bin/gdb", "containerId": "<Your Running Container ID>", "internalConsoleOptions": "openOnSessionStart" } ] } ``` 上述配置项中特别注意要替换掉`<Your Running Container ID>`部分为实际使用的容器ID号,可以通过宿主机上的`docker ps`查看获得。另外还需定义一个预启动任务用来提前准备好待测可执行文件,具体做法是在同一级路径新增tasks.json文件描述编译过程。 #### 五、验证效果 当一切准备工作完成后就可以尝试点击左侧边栏绿色箭头按钮开启一次完整的编译加断点单步跟踪体验啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值