【问题标题】:VSCode wrong path while debugging Go program调试Go程序时VSCode错误的路径
【发布时间】:2021-09-25 21:05:24
【问题描述】:

我的 main.go 位于子文件夹 cmd/admin/main.go 中,但是当我在调试并且文件中有错误时,它会为我提供来自 main.go 文件夹而不是工作区文件夹的相对路径。例如,如果我尝试 Ctrl+单击它,我将遇到错误 ..\..\path\to\file.go:238:3: undefined: test
如果我从根 go run cmd/admin/main.go 启动命令,该命令按预期返回 path\to\file.go:238:3: undefined: test

我的launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "cwd": "${workspaceFolder}",
      "program": "${workspaceFolder}/cmd/admin",
      "env": {},
      "args": []
    }
  ]
}

转到版本 1.16.6
VSC 版本 1.58.2
操作系统 Windows10

【问题讨论】:

  • 是 Go 1.6.6 还是 Go 1.16.6?你的项目有go.mod/go.sum 文件吗?
  • 抱歉 Go 1.16.6,go.mod 和 go.sum 都存在

标签: go debugging visual-studio-code


【解决方案1】:

转到文件 > 将文件夹添加到工作区 然后选择包含 main.go 的文件夹 也可以在命令行中进行:

code cmd/admin -a

现在确保您当前的 launch.json 已被删除以重新开始,您的工作区应如下所示:

请注意,有一个 'package main' 和 'func main()' 这是 Go 知道入口点所必需的。

现在按下断点运行和调试:

就是这样,它现在应该适用于您添加到工作区的任何文件夹。如果您需要更具体的调试选项,请将它们添加到您的工作区,它们将应用于您运行的文件的上下文中。点击'创建一个launch.json文件。:

选择工作区:

选择 Go:启动包

您现在有一个启动配置,该配置将应用于您从中运行它的目录:

确保保存您的工作区以保留它:

笔记

  • 如果它们已经存在于任何地方,请务必删除当前的 launch.json 文件。

  • 确保所有源代码都位于 GOPATH/src 中,您可以通过将其放入命令行来找出 GOPATH 的位置:

go env GOPATH
  • 该文件不需要命名为 main.go,但您必须有一个名为 main.go 的包和一个名为 main 的函数,以便 Go 知道每个可执行文件的入口点,例如 influxdb 的两个 cli:@987654329 @

更多信息

VS Code 工作区调试: https://code.visualstudio.com/docs/editor/multi-root-workspaces#_debugging

GOPATH:https://golang.org/doc/gopath_code

【讨论】:

  • 尝试点击链接时出现不同的路径错误,基本的launch.json会给我c:\Users\shado\Projects\path\to\file.go,而新的工作区launch.json会给我c:\Users\shado\Projects\PROJECT-X\cmd\path\to\file.go正确的路径应该是 c:\Users\shado\Projects\PROJECT-X\path\to\file.go 没有 cmd。我想这就是进步。
  • @Shadoweb 在命令提示符中输入“go env GOPATH” 这表明您的所有源代码都应该与 Go 工具(如模块)一起使用。看起来你在 Windows 上,所以应该把你所有的 Go 源代码放在这里:c:\Users\shado\go\src\PROJECT-X\ 然后删除你当前的launch.json,将两个子文件夹添加到工作区,然后添加调试配置。应该管用。我会更新答案以包含此信息。
  • 实际上,通过将 TEST 替换为 panic("TEST") 它确实有效。我想我试图解决一个错字问题而不是一个真正的问题,无论如何这几乎永远不会发生......我想我可以忍受。感谢您的帮助。
  • @Shadoweb 没问题,很高兴你能正常工作。
【解决方案2】:

尝试并确保:

  • 你没有设置GOxxx 环境变量(没有GO_BASE_PATH,没有GOROOT),除了GOPATH 设置为%USERPROFILE%\go%GOPATH%\bin 在你的%PATH%
  • 您正在使用安装在默认 C:\Program Files\Go\ 文件夹中的 Go
  • 你已经设置了你的项目using Go modulesgo mod init myproject
  • 您的项目根文件夹有defined a multi-root workspace,仅由一个根组成:您的项目。保存该工作区(它将创建一个<name>.code-workspace JSON 文件)。

然后查看问题是否仍然存在(并且您的 launch.json 中不应需要 cwd

【讨论】:

  • 我在 C:\dev\Go 中有文件夹,但这真的很重要吗?我很久以前使用go mod init 创建了这个项目,但使用 VSC 进行了更新。我尝试了多根工作区,但在 Ctrl+单击时仍然失败,它只会向上移动 1 个文件夹而不是 2 个文件夹并停在${workspaceFolder}/cmd。我想这是一些进步。
  • @Shadoweb 不确定:我只是在描述我的设置,其中 delve 可以完美运行(顺便说一下,请确保更新您的 Go 工具)
猜你喜欢
  • 2021-12-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2020-10-23
  • 2017-08-18
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多