[컴] go language debugger delve setting + Visual Studio Code

비쥬얼 스튜디오 코드 에서 go 디버거 delve 세팅 / golang debugger delve



Visual studio Code base directory for delve debugger

visual studio code 에서 F5 로 debugger 를 실행하는 것은 dlv debug 가 가능한 path 를 root 로 놓고 하면 된다.(File > Open Folder)
c:\go\src\cmd> dlv debug 
를 해서 성공하면 (dbg) prompt 가 보인다.
이런 경우에 open folder 에서 "c:\go\src\cmd" 를 열고, f5 를 누르면 된다.



delve compile for windows

Windows 에서 delve 를 build 하는 법은 아래를 참고하자.
Visual Studio Code 에서 사용할 수 있도록 delve.exe 는 %GOROOT%\bin 에 copy 해 놓자.



Visual Studio Code 설정

절차

  1. VS code 설치
  2. Go plugin 설치
  3. Go plugin 에서 사용되는 tools 들 설치
  4. launch.json 작성
  5. settings.json 작성
  6. Open go project
  7. F5 로 debugger 실행

Visual Studio Code 설치

아래 경로에서 download 할 수 있다. 되도록 영문으로 설정하자. 한글은 command palette (alt+ctrl+p) 을 사용하기 불편하다.

command palette 에서 '언어' 를 치면 언어설정을 할 수 있는 메뉴를 찾을 수 있다.


Go plugin 설치

  1. visual studio code 실행
  2. alt+ctrl+p > Extensions: Install Extension > Go 설치




plugin 에서 사용되는 Tools

Go plugin 에서 사용되는 tools 들이 여러가지 이다. 이것들을 다운로드 하자.

환경변수 설정 및 tools 설치

참고로 GOPATH 를 golang 이 깔려있는 folder 로 선택하자. (여기선 d:\go)
set GOPATH=d:\go
set path=%path%;c:\Program Files (x86)\Git\bin\;%GOPATH%\bin;
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
go get -u -v golang.org/x/tools/cmd/guru


launch.json

F5 를 누르면 .vscode/launch.json 를 작성하라고 나온다. 물론 직접 만들어서 작성해도 된다. dlv debug 를 위한 세팅은 아래 처럼 해놨다.

godep go install 을 사용하는 경우에는 godep path 로 나온 항목을 GOPATH 에 넣어줘야 한다.(참고)

env 를 통해서 원하는 환경변수를 설정 할 수 있다. 그런데 여러개를 설정할 수 없다. ';' 로 구분지어서 넣었는데, error 가 없어서 잘되는 것인줄 알았는데, 잘 모르겠다. GOPATH 는 잘 되었지만, PATH 의 설정은 뭔가 문제가 있었다.

그러니 필요한 환경변수는 "시스템 속성 > 환경변수" 에서 설정해 놓자.


{
 "version": "0.2.0",
 "configurations": [
  {
   "name": "Launch",
   "type": "go",
   "request": "launch",
   "mode": "debug",
   "program": "${workspaceRoot}",
   "env": {
    "GOPATH": "d:/mine/programming/go/ethereum/src/github.com/ethereum/go-ethereum/Godeps/_workspace;d:/mine/programming/go/ethereum/",
    "PATH" : "%path%;c:/Program Files (x86)/Git/bin/;%GOPATH%/bin;%GOROOT%/bin;d:/Program Files/mingw-w64/x86_64-5.3.0-posix-seh-rt_v4-rev0/mingw64/bin"
   },
   "args": []
  }
 ]
}


intellisense(ctrl + space) 로 어떤 key 값이 가능한지 알 수 있다.

Options, settings.json

plugin 의 options 을 조정할 수 있다. .vscode/settings.json 을 만들어서 사용하면 된다.
{
    "go.buildOnSave": true,
    "go.lintOnSave": true,
    "go.vetOnSave": true,
    "go.buildTags": "",
    "go.buildFlags": [],
    "go.lintFlags": [],
    "go.vetFlags": [],
    "go.coverOnSave": false,
    "go.useCodeSnippetsOnFunctionSuggest": false,
    "go.formatOnSave": true,
    "go.formatTool": "goreturns",
    "go.goroot": "d:/Go",
    "go.gopath": "d:/mine/programming/go/ethereum",
    "go.gocodeAutoBuild": false
}



Open project

  • File -> Open folder -> go project 를 선택
  • breakpoint 지정 : 마우스로 왼쪽 line number 를 클릭
  • f5 로 실행
  • Debugging in Visual Studio Code


Debugging 설정



debug symbol 문제

내 경우에는 여러가지를 깔다보니, gcc 버전이 안맞아서 생긴 듯 했다. (추측) delve 를 만들때 사용한 gcc 를 이용해서 작업하니 잘 돌아갔다.
# github.com/ethereum/go-ethereum/cmd/geth
github.com/ethereum/go-ethereum/crypto/secp256k1(.text): ___chkstk_ms: not defined
github.com/ethereum/go-ethereum/crypto/secp256k1(.text): undefined: ___chkstk_ms
exit status 2




Linux 에서 설정하기

Linux 에서 go-ethereum 설치


를 참고하자.



delve build on linux


를 참고하자.



Visual Studio Code

visual studio code 의 설치는 windows 와 같다. 단순히 한가지 차이가 있다면 launch.json 의 작성이다.
  1. VS code 설치
  2. Go plugin 설치
  3. Go plugin 에서 사용되는 tools 들 설치
  4. launch.json 작성
  5. settings.json 작성
  6. Open go project
  7. F5 로 debugger 실행

launch.json

linux 에서는 GOPATH 를 설정하는데에 bash 에서는 아래처럼 GOPATH 에 2개 이상의 path 를 넣을 수 있다.
GOPATH=/home/username/go/src/github.com/ethereum/go-ethereum/Godeps/_workspace:$GOPATH

그런데 launch.json 에서 아래와 같이 적으면 relative path 어쩌고 하면서 error (warning 인가?) 가 난다.

여하튼 그래서 어쩔 수 없이 .bashrc 에서 GOPATH의 설정을 해주었다. 기본적으로 이작업이 불필요할 수 있지만 godep 등을 활용해서 build 를 했던 경우라면 필요하다.(godep go install 은 GOPATH=`godep path`:$GOPATH / go install 로 대체할 수 있다. : 참고)
export GOPATH=/home/namh/go:/home/namh/go/src/github.com/ethereum/go-ethereum/Godeps/_workspace


{
 "version": "0.2.0",
 "configurations": [
  {
   "name": "Launch",
   "type": "go",
   "request": "launch",
   "mode": "debug",
   "program": "${workspaceRoot}",
   "env": {

   },
   "args": []
  }
 ]
}



댓글 없음:

댓글 쓰기