레이블이 delve인 게시물을 표시합니다. 모든 게시물 표시
레이블이 delve인 게시물을 표시합니다. 모든 게시물 표시

mac golang delve 문제

# mac 10.12 버전으로 업데이트 되면서 vscode 에서 golang debug 가 실행되지 않는다.
# golang debugger 인 delve 에서 발생하는 문제로 다음과 같은 에러가 발생하며 실행되지 않는다.
cannot get thread count

# 현재 brew 로 설치 가능한 delve 버전은 다음과 같고 아직 수정사항이 반영되지 않았다.
Version: 0.11.0-alpha


# 해결방법
# 우선 다음과 같은 방식으로 gopath 에 소스를 다운받는다.
go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv

# 이슈가 해결된 665브랜치로 변경하여 설치한다.
cd $GOPATH/src/github.com/derekparker/delve
git fetch origin pull/665/head
git checkout FETCH_HEAD
CERT=dlv-cert make install

# 참고로 빌드된 delve 파일은 다음과 같이 생성되며 gopath 를 통해 사용된다.
/Users/ysoftman/workspace/gopath/bin/dlv

vscode Golang

# vscode Golang 사용하기
# vscode-go extension 설치
https://marketplace.visualstudio.com/items?itemName=lukehoban.Go
# vscode 업데이트 후 동작하지 않으면 go extension 삭제하고 재설치
ctrl + shift + p -> ext install (install extension) -> "Rich Go language support for Visual Studio Code" 설치 -> Restart

# 사용자 설정(default setting 값은 수정할 수 없고, overwrite 된다.)
File -> Preferences -> User Settings
{
  "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,
  // goreturns 은 goimports(자동 임포트), gofmt(자동 포맷팅)를 사용하고 리턴코드도 자동으로 채워준다.
  "go.formatTool": "goreturns",
  "go.gocodeAutoBuild": false,
  // 맥,리눅스 기준
  //"go.goroot": "/usr/local/go",
  //"go.gopath": "/Users/ysoftman/gopath"
  // 윈도우 기준
  "go.goroot": "c:\\go",
  "go.gopath": "c:\\ysoftman\\Project\\gopath"
}

#####

# delve(디버거) 설치(go v1.5 이상 필요)
https://github.com/derekparker/delve/tree/master/Documentation/installation

# 맥의 경우
brew install go-delve/delve/delve

# 리눅스의 경우
go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv
cd $GOPATH/src/github.com/derekparker/delve
make install

# 윈도우 mingw-w64
http://sourceforge.net/projects/mingw-w64/
# mingw-w64 설치시 아래와 같이 선택
Version: Latest available (5.3.0 at time of writing)
Architecture: x86_64
Threads: posix (shouldn't actually matter)
Exception: seh (shouldn't actually matter)
Build revision: Latest available (0 at time of writing)
# 설치경로 C:\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0
# 설치 완료 후 환경 변수 PATH 에 경로 추가
# C:\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0\mingw64\bin
# dlv 라이브러리 빌드 및 설치
# 참고로 다른 버전의 mingw 가 설치되어 path 로 잡혀 있어 실행되면
# 에러가 발생하니 환경변수 path 에서 제외시키던가 다른버전은 삭제하도록 한다.
go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv
cd c:\ysoftman\project\gopath\src\github.com\derekparker\delve
set GO15VENDOREXPERIMENT=1
mingw32-make install

# 처음에는 디버거 선택 화면이 나오고 go 선택하면  launch 환경을 편집할 수 있다.
# 설정은 현재 워킹 디렉토리에서 .vscode/launch.json 로 저장된다.
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch",
      "type": "go",
      "request": "launch",
      "mode": "debug",
      "program": "${workspaceRoot}",
      "env": {},
      "args": []
    }
  ]
}

# go 포맷팅(gofmt)
alt + shift + f

# go back
alt + left arrow

# go forward
alt + right arrow

# debugging start
f5

# debugging stop
shift + f5

# debugging step over
f10

# debugging step into
f11

# debugging step out
Shift+F11

# 기타 Command Palette(ctrl + shift + p) 에서 명령어를 찾아 수행

#####

# 필요시 golang 툴 설치
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-find-references
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