首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法用VSCode中的断点调试Golang

无法用VSCode中的断点调试Golang
EN

Stack Overflow用户
提问于 2021-10-21 11:06:01
回答 4查看 2.1K关注 0票数 3

我在VS代码中调试带有断点的Golang应用程序。调试器抱怨找不到存在的文件。

你们中有人知道如何在VS代码中为Go应用程序启用断点吗?

调试器日志:

代码语言:javascript
运行
复制
Debuggee is not running. Setting breakpoints without halting.
All cleared
Creating on: /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go:63
Creating on: /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go:84
All cleared
All set:[]
SetBreakPointsResponse
2021-10-21T12:52:17+02:00 debug layer=rpc <- RPCServer.CreateBreakpoint(rpc2.CreateBreakpointIn{"Breakpoint":{"id":0,"name":"","addr":0,"addrs":null,"file":"/home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go","line":63,"Cond":"","HitCond":"","continue":false,"traceReturn":false,"goroutine":false,"stacktrace":0,"LoadArgs":{"FollowPointers":true,"MaxVariableRecurse":1,"MaxStringLen":64,"MaxArrayValues":64,"MaxStructFields":-1},"LoadLocals":{"FollowPointers":true,"MaxVariableRecurse":1,"MaxStringLen":64,"MaxArrayValues":64,"MaxStructFields":-1},"WatchExpr":"","WatchType":0,"hitCount":null,"totalHitCount":0,"disabled":false}})
2021-10-21T12:52:17+02:00 debug layer=rpc -> *rpc2.CreateBreakpointOut{"Breakpoint":{"id":0,"name":"","addr":0,"addrs":null,"file":"","line":0,"Cond":"","HitCond":"","continue":false,"traceReturn":false,"goroutine":false,"stacktrace":0,"LoadArgs":null,"LoadLocals":null,"WatchExpr":"","WatchType":0,"hitCount":null,"totalHitCount":0,"disabled":false}} error: "could not find file /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go"
2021-10-21T12:52:17+02:00 debug layer=rpc <- RPCServer.CreateBreakpoint(rpc2.CreateBreakpointIn{"Breakpoint":{"id":0,"name":"","addr":0,"addrs":null,"file":"/home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go","line":84,"Cond":"","HitCond":"","continue":false,"traceReturn":false,"goroutine":false,"stacktrace":0,"LoadArgs":{"FollowPointers":true,"MaxVariableRecurse":1,"MaxStringLen":64,"MaxArrayValues":64,"MaxStructFields":-1},"LoadLocals":{"FollowPointers":true,"MaxVariableRecurse":1,"MaxStringLen":64,"MaxArrayValues":64,"MaxStructFields":-1},"WatchExpr":"","WatchType":0,"hitCount":null,"totalHitCount":0,"disabled":false}})
2021-10-21T12:52:17+02:00 debug layer=rpc -> *rpc2.CreateBreakpointOut{"Breakpoint":{"id":0,"name":"","addr":0,"addrs":null,"file":"","line":0,"Cond":"","HitCond":"","continue":false,"traceReturn":false,"goroutine":false,"stacktrace":0,"LoadArgs":null,"LoadLocals":null,"WatchExpr":"","WatchType":0,"hitCount":null,"totalHitCount":0,"disabled":false}} error: "could not find file /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go"
2
Error on CreateBreakpoint: could not find file /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go

档案存在:

代码语言:javascript
运行
复制
gbajson@misio:~$ ls -l /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go
-rw-r--r-- 1 gbajson gbajson 2961 Oct 21 12:22 /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go

我已经检查过,这不是文件权限的问题。我还跟进了拉格西版本的dlv:https://github.com/golang/vscode-go/blob/master/docs/debugging-legacy.md#selecting-legacy-debug-adapter的过程。

调试器配置

  • workspace.code-workspace “启动”:{“版本”:"0.2.0",“配置”:[{“名称”:“调试”,“键入”:“启动”,“请求”:“启动”,“模式”:“自动”,“程序”:"${fileDirname}","debugAdapter":“遗留”,"env":{},"args":[],"showLog":true,"logOutput":"rpc",“跟踪”:"log“},
  • settings.json
代码语言:javascript
运行
复制
{
    "go.delveConfig": {
        "debugAdapter": "legacy",
    },
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-10-21 12:06:17

我发现了问题。VS代码不能很好地处理符号链接。当我在VS代码中实际设置一个项目时,调试器就开始正常工作了。

代码语言:javascript
运行
复制
gbajson@misio:~$ realpath /home/gbajson/Sync/clickr/clickr-node-api/clickr-node-api.go
/storage/amoje/Sync/clickr/clickr-node-api/clickr-node-api.go

这个问题也在:https://github.com/golang/vscode-go/issues/1677中描述。

票数 3
EN

Stack Overflow用户

发布于 2021-12-09 19:15:00

想在这里分享我的解决方案。在阅读了一些github问题 vs-code-go之后,这个问题似乎是remotePathsubstitutePath的结果。经过几次尝试,将remotePath设置为""终于成功了。

代码语言:javascript
运行
复制
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Connect to server",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "remotePath": "",
            "port": 40000,
            "host": "<host>",
        }
    ]
}
票数 1
EN

Stack Overflow用户

发布于 2022-01-20 07:48:59

这是gbajson回答的后续。

象征性的链接对我来说是个问题。在launch.json中使用此配置解决了这个问题,同时允许我保留符号链接:

代码语言:javascript
运行
复制
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd/server/main.go",
            "envFile": "${workspaceFolder}/.env",
            "substitutePath": [
                {
                    "from": "/home/me/go-workspaces",
                    "to": "/data/projects/workspaces"
                }
            ]
        }
    ]
}

具体来说,它是"substitutePath“部分。

我的工作区目录实际上是从“/home/me/go- workspace”符号链接到真正的目录“/data/project/workspace”。

请参阅:https://github.com/golang/vscode-go/blob/master/docs/debugging.md#debugging-symlink-directories

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69660812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档