当前位置: 首页 > 工具软件 > Go Debug > 使用案例 >

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

巩镜
2023-12-01

现象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": {
    },
}
 类似资料: