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断点可以工作了。
原因分析:
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": {
},
}