3

希望我能正确解释这一点。

更新:我可以确认dlv debug -l 127.0.0.1:2345 确实有效。因此我必须在 VsCodelaunch.json

更新:消除了恐慌。go 版本有不同的版本。现在 VsCode 中的调试器无法正常工作,它显示“未验证断点”。但如果我dlv从终端使用,如果我在包含代码的文件夹中,它工作正常。

我正在尝试使用示例代码进行远程调试。

它适用于这种变化。

你知道该怎么做吗?我试图将 更改launch.json"program": "${workspaceRoot}",包含"program": "${workspaceRoot}/src/app",.

启动.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" */ 
        }
    ]
}

Dockerfile:

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"]
4

2 回答 2

1

我设法delve通过vscode使用.godocker-compose

Dockerfile我像你一样使用 my来构建应用程序,只是覆盖了 my 中的一些容器属性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 上,所以我docker-machine ip default打印的是 IP。127.0.0.1如果这是您的docker-machine ip输出,您可以将其更改为。

docker-compose upmy_app打印:

我的应用程序_1 | 2016/12/14 12:41:32 server.go:71: 使用 API v1

我的应用程序_1 | 2016/12/14 12:41:32 debugger.go:65:使用 args 启动进程:[/opt/go/src/github.com/my_user/my_app/debug server]

我的应用程序_1 | API 服务器监听:[::]:2345

在设置一些断点并附加调试器之后,它就可以工作了。

希望这可以帮助!

于 2016-12-14T13:10:21.100 回答
0

我通过向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",

    }

这样做会在调试控制台中显示它正在寻找具有错误路径的源文件。我意识到应该(至少对于我的设置)remotePath只是launch.json/home/me/goprojects/src/github.com/owner/project

因此,尝试添加跟踪并仔细检查调试控制台

于 2019-11-06T21:12:54.787 回答