2016-09-12 15 views
2

희망이 권리를 설명 할 수 있습니다.원격 디버깅 - 확인되지 않은 중단 점

업데이트 : dlv debug -l 127.0.0.1:2345이 작동하는지 확인할 수 있습니다. 따라서 나는 VsCode에 있어야합니다 launch.json

업데이트 : 패닉이 제거되었습니다. 다른 버전의 이동 버전이있었습니다. 이제 VsCode의 디버거가 작동하지 않고 "Unverified breakpoint"라고 표시됩니다. 하지만 코드가있는 폴더에있는 경우 터미널에서 dlv을 사용하면 올바르게 작동합니다.

this 샘플 코드로 원격 디버깅을 시도하고 있습니다.

변경 사항은 this과 함께 작동합니다.

수행 할 작업을 알고 있습니까? "program": "${workspaceRoot}/src/app",과 같은 경로를 포함하도록 launch.json"program": "${workspaceRoot}",으로 변경하려고했습니다.

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

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

답변

1

나는 docker-compose를 사용하여 나를 위해 일하는 godelvevscode을 얻을 수 있었다.

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 파일 : 나는 OS X에있어 이후 IP가 무엇을 내 docker-machine ip default 인쇄입니다

{ 
    "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": [] 
     } 
    ] 
} 

하는 것으로. 이것이 docker-machine ip이 출력하는 경우 127.0.0.1으로 변경할 수 있습니다. docker-compose up

, my_app 인쇄 :

my_app_1 | 2016/12/14 12:41:32 server.go : 71 : API v1 사용

my_app_1 | 2016/12/14 12:41:32 debugger.go : 65 : args로 프로세스 시작 :

my_app_1 | 듣고있는 API 서버 : [::] : 2345

그리고 몇 가지 중단 점을 설정하고 디버거를 부착 한 후 작동합니다.

희망이 도움이됩니다.