VSCode点击Go项目构建错误无法跳转至对应代码行问题
问题现象
- 当前项目目录结构:
├── go.mod └── write-file └── write-file.go
- 在
write-file.go中编写代码时出现语法错误,按下Shift+F9运行该文件时,VSCode输出如下调试构建日志:
Starting: /home/guettli/go/bin/dlv dap --check-go-version=false --listen=127.0.0.1:42097 --log-dest=3 from /home/guettli/projects/hello-go/write-file DAP server listening at: 127.0.0.1:42097 Build Error: go build -o /home/guettli/projects/hello-go/write-file/__debug_bin -gcflags all=-N -l . # exampe.com/hello/write-file ./write-file.go:7:29: cannot use "üöä" (untyped string constant) as []byte value in argument to os.WriteFile (exit status 2)
- 点击错误信息中的
./write-file.go:7:29:尝试跳转至对应错误位置时,VSCode提示找不到该文件,推测是VSCode当前工作目录为write-file文件夹的父目录导致。 - 核心疑问:该现象是产品Bug、预期特性还是操作失误?需要实现点击构建错误信息即可跳转至对应代码行的效果。
注:上述输出中的类型不兼容报错仅为示例错误,与本次路径跳转问题无关。
原因说明
该现象既不是产品Bug,也不属于预期特性,是调试配置的工作目录不匹配导致的路径解析错误:
- 从dlv启动参数可以看到,调试进程的工作目录是
/home/guettli/projects/hello-go/write-file,Go编译器输出的错误路径./write-file.go是相对于该工作目录的相对路径。 - VSCode解析错误跳转路径时,默认以当前打开的工作区根目录(也就是
write-file的上层父目录hello-go)为查找基准,按照./write-file.go的路径查找时,实际会去找hello-go/write-file.go,和真实文件路径hello-go/write-file/write-file.go不匹配,就会弹出找不到文件的提示。
解决方法
二选一即可:
- 方案1:调整VSCode打开的工作区目录
直接打开write-file文件夹作为VSCode的工作区根目录,不要打开它的上层hello-go目录,此时VSCode解析相对路径的基准和dlv调试工作目录完全一致,点击错误信息即可正常跳转。 - 方案2:修改调试配置指定工作目录
如果需要保留hello-go作为工作区根目录,在项目下的.vscode/launch.json文件中,给对应Go调试配置添加cwd字段,强制指定调试工作目录为当前文件所在目录,配置示例:
保存配置后重启调试,路径解析即可匹配正确,点击错误就能直接跳转到对应代码行。{ "version": "0.2.0", "configurations": [ { "name": "Debug Go File", "type": "go", "request": "launch", "mode": "debug", "program": "${fileDirname}", "cwd": "${fileDirname}" } ] }
内容的提问来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

