现象
现象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":{},}
版权归原作者 hello_250 所有, 如有侵权,请联系我们删除。