远程调试 - 未验证的断点
Remote debugging - Unverified breakpoint
希望我能解释清楚。
更新:我可以确认 dlv debug -l 127.0.0.1:2345
确实有效。
因此我必须在 VsCode launch.json
更新:消除了恐慌。 go 版本有不同。
现在 VsCode 中的调试器不工作了,它说 "Unverified breakpoint"。但是如果我在终端中使用 dlv
,如果我在包含代码的文件夹中,它就可以正常工作。
我正在尝试使用 this 示例代码进行远程调试。
它适用于 变化。
你知道要做什么吗?我试图将 launch.json
更改为 "program": "${workspaceRoot}",
以包含像 "program": "${workspaceRoot}/src/app",
.
这样的路径
Launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceRoot}",
"env": {},
"args": []
},
{
// To remote debug in Docker, run the following before debugging:
// # docker build -t webapp-go .
// # docker run -d --name webapp-go --privileged -p 8080:8080 -p 2345:2345 webapp-go
// # docker run -d --name webapp-go --privileged -p 8080:8080 -p 2345:2345 -v "${PWD%/*}/src/app/":/go/src/app webapp-go
// And then each time you want to restart debugging:
// # docker restart
"name": "Remote debug in Docker",
"type": "go",
"request": "launch",
"mode": "remote",
"program": "${workspaceRoot}",
"env": {},
"args": [],
"remotePath": "/go/src/app",
"port": 2345, // Port
"host": "127.0.0.1" // Docker IP
/* "preLaunchTask": "docker" */
}
]
}
Docker 文件:
FROM golang:1.6
RUN go get -u -v github.com/derekparker/delve/cmd/dlv
EXPOSE 2345
# RUN mkdir -p /go/src/app
# WORKDIR /go/src/app
# VOLUME ["src/app2"]
VOLUME ["/go/src/app"]
RUN mkdir -p /go/src/app
WORKDIR /go/src/app
COPY src/app /go/src/app
RUN go-wrapper download
RUN go-wrapper install
EXPOSE 8080
CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log"]
我通过使用 docker-compose
.
设法让 delve
和 vscode
与 go
一起为我工作
我使用 Dockerfile
像您一样构建应用程序,只是覆盖 docker-compose.yml
中的一些容器属性。
这是我的 docker-compose.yml
的样子:
version: '2'
services:
my_app:
build: .
security_opt:
- seccomp:unconfined
entrypoint: dlv debug github.com/my_user/my_app -l 0.0.0.0:2345 --headless=true --log=true -- server
volumes:
- .:/opt/go/src/github.com/my_user/my_app
ports:
- "2345:2345"
expose:
- "2345"
和 launch.json
文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote Docker",
"type": "go",
"request": "launch",
"mode": "remote",
"remotePath": "/opt/go/src/github.com/my_user/my_app",
"port": 2345,
"host": "192.168.99.100",
"program": "${workspaceRoot}",
"env": {},
"args": []
}
]
}
请注意,因为我在 OS X 上,IP 就是我的 docker-machine ip default
打印的内容。如果这是您的 docker-machine ip
输出,您可以将其更改为 127.0.0.1
。
在 docker-compose up
上,my_app
打印:
my_app_1 | 2016/12/14 12:41:32 server.go:71: Using API v1
my_app_1 | 2016/12/14 12:41:32 debugger.go:65: launching process with
args: [/opt/go/src/github.com/my_user/my_app/debug server]
my_app_1 | API server listening at: [::]:2345
在设置一些断点并附加调试器后,它就可以工作了。
希望对您有所帮助!
我通过将 "trace" 选项添加到 launch.json
(在 VS Code 中)解决了我的问题
{
"name": "Attach remote ",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "/home/me/goprojects/src/github.com/owner/project/package",
"port": 2345,
"host": "xxxx.xyz",
"trace":"log",
}
这样做会在调试控制台中显示它正在寻找路径错误的源文件。我意识到 launch.json
中的 remotePath
应该(至少对于我的设置)只是 /home/me/goprojects/src/github.com/owner/project
因此,尝试添加跟踪并仔细检查调试控制台
希望我能解释清楚。
更新:我可以确认 dlv debug -l 127.0.0.1:2345
确实有效。
因此我必须在 VsCode launch.json
更新:消除了恐慌。 go 版本有不同。
现在 VsCode 中的调试器不工作了,它说 "Unverified breakpoint"。但是如果我在终端中使用 dlv
,如果我在包含代码的文件夹中,它就可以正常工作。
我正在尝试使用 this 示例代码进行远程调试。
它适用于
你知道要做什么吗?我试图将 launch.json
更改为 "program": "${workspaceRoot}",
以包含像 "program": "${workspaceRoot}/src/app",
.
Launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceRoot}",
"env": {},
"args": []
},
{
// To remote debug in Docker, run the following before debugging:
// # docker build -t webapp-go .
// # docker run -d --name webapp-go --privileged -p 8080:8080 -p 2345:2345 webapp-go
// # docker run -d --name webapp-go --privileged -p 8080:8080 -p 2345:2345 -v "${PWD%/*}/src/app/":/go/src/app webapp-go
// And then each time you want to restart debugging:
// # docker restart
"name": "Remote debug in Docker",
"type": "go",
"request": "launch",
"mode": "remote",
"program": "${workspaceRoot}",
"env": {},
"args": [],
"remotePath": "/go/src/app",
"port": 2345, // Port
"host": "127.0.0.1" // Docker IP
/* "preLaunchTask": "docker" */
}
]
}
Docker 文件:
FROM golang:1.6
RUN go get -u -v github.com/derekparker/delve/cmd/dlv
EXPOSE 2345
# RUN mkdir -p /go/src/app
# WORKDIR /go/src/app
# VOLUME ["src/app2"]
VOLUME ["/go/src/app"]
RUN mkdir -p /go/src/app
WORKDIR /go/src/app
COPY src/app /go/src/app
RUN go-wrapper download
RUN go-wrapper install
EXPOSE 8080
CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log"]
我通过使用 docker-compose
.
delve
和 vscode
与 go
一起为我工作
我使用 Dockerfile
像您一样构建应用程序,只是覆盖 docker-compose.yml
中的一些容器属性。
这是我的 docker-compose.yml
的样子:
version: '2'
services:
my_app:
build: .
security_opt:
- seccomp:unconfined
entrypoint: dlv debug github.com/my_user/my_app -l 0.0.0.0:2345 --headless=true --log=true -- server
volumes:
- .:/opt/go/src/github.com/my_user/my_app
ports:
- "2345:2345"
expose:
- "2345"
和 launch.json
文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote Docker",
"type": "go",
"request": "launch",
"mode": "remote",
"remotePath": "/opt/go/src/github.com/my_user/my_app",
"port": 2345,
"host": "192.168.99.100",
"program": "${workspaceRoot}",
"env": {},
"args": []
}
]
}
请注意,因为我在 OS X 上,IP 就是我的 docker-machine ip default
打印的内容。如果这是您的 docker-machine ip
输出,您可以将其更改为 127.0.0.1
。
在 docker-compose up
上,my_app
打印:
my_app_1 | 2016/12/14 12:41:32 server.go:71: Using API v1
my_app_1 | 2016/12/14 12:41:32 debugger.go:65: launching process with args: [/opt/go/src/github.com/my_user/my_app/debug server]
my_app_1 | API server listening at: [::]:2345
在设置一些断点并附加调试器后,它就可以工作了。
希望对您有所帮助!
我通过将 "trace" 选项添加到 launch.json
(在 VS Code 中)解决了我的问题
{
"name": "Attach remote ",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "/home/me/goprojects/src/github.com/owner/project/package",
"port": 2345,
"host": "xxxx.xyz",
"trace":"log",
}
这样做会在调试控制台中显示它正在寻找路径错误的源文件。我意识到 launch.json
中的 remotePath
应该(至少对于我的设置)只是 /home/me/goprojects/src/github.com/owner/project
因此,尝试添加跟踪并仔细检查调试控制台