vscode中的调试不会在断点处停止,调试器启动时会说“找不到文件...”

Ubuntu。vscode 1.62.1。去1.17.3。vscode 去扩展 v0.29.0。钻研 v1.7.1。

我是 vscode 和 Go 的新手。我有多年在 Eclipse 中调试 Java 应用程序的经验。

我构建了一个小型多模块 Go 应用程序。我可以在其他模块的 main 和其他函数中设置断点。在 main.go 中,我选择“开始调试”。

它启动应用程序,我可以从控制台判断它正在工作,并且 REST 端点以我的虚拟响应进行响应。

但是,它不会在断点处停止。当我开始会话时,红色的断点标记突然变得空心,并且悬停在其中一个上会显示一条消息“找不到文件...”,它会打印出问题源文件的完整路径。

当我启动它时,它会在控制台中显示以下内容:

开始: /home/.../go/bin/dlv-dap dap --check-go-version=false --listen=127.0.0.1:43347 --log-dest=3 from /home/.../ ... DAP 服务器正在侦听:127.0.0.1:43347

我没有修改launch.json(我希望有一天能提供一个更友好的界面来编辑启动配置)。

我还能做错什么?

更新

这是在我按下 F5(开始调试)之前显示 main.go 的屏幕截图:

http://img4.mukewang.com/634409e3000164c008800685.jpg

请注意,我在 main 的第一行的 print 语句上有一个断点。

这是我按 F5 后看到的:

http://img2.mukewang.com/634409f30001af3508840683.jpg

请注意,它在控制台中打印了“At start of main”。它并没有在断点处停止。悬停在断点上时,还要注意工具提示中的消息。



慕娘9325324
浏览 393回答 1
1回答

繁华开满天机

首先,只需确保您已使用go mod init voltagems: 启动您的项目,这将解释import "voltagems/xxx",但也有助于在调试时深入查找您的文件。您 应该在.main.gogo.modgo.summain.go其次,检查您的go env输出,确保GOPATH并GOROOT设置为默认路径。OP David M. Karr在评论中补充道:我第一次创建项目时确实运行了“ go mod init”,但我意识到我不喜欢根模块名称,所以我将其更改为“ voltagems”我相信你可以直接编辑 go.mod 第一行,并确保它说:module voltagems然后go mod verify+go mod tidy最后,go build .. 重新启动您的 VSCode(或命令Reload Window),看看问题是否仍然存在。OP David M. Karr指出了根本原因:我的项目路径中有符号链接。VSCode-Go 中有一个“ substitutePath”配置用于映射到绝对路径。可以看到Debugging with Legacy Debug Adapter中提到的这个参数substitutePath应用路径映射以从编辑器中的路径到已编译程序中的路径(默认值:[])。这来自问题 622 “ debug:使用符号链接时断点不起作用”。并提交 93f32bbsrc/debugAdapter: 添加substitutePath调试配置此更改为启动和附加请求添加了新的配置选项。substituePath接受一个从字符串映射到字符串的数组,该数组用于转换传递给调试器然后返回客户端的路径。这允许用户将他们的符号链接目录转换为实际用于构建二进制文件的文件。此外,这也可用于远程调试,以及在程序构建后文件位置发生移动时。示例:您需要一个from和to键:"substitutePath": [         {             "from": "/symlink/path/dir/on/local/machine",             "to": "/absolute/path/dir/on/local/machine",         },
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go