제목은 그것을 거의 요약합니다. 나는 Go를 시도하고 있는데, 인터랙티브 환경에서 원하는만큼 중단 점을 설정하고 스텝 인 / 오버 / 아웃 할 수 있다는 것이 정말 그리워요. 나는 gdb를 사용하여 Go를 디버깅 할 수 있다는 것을 알고 있지만 중단 점을 위해 gdb에 연결할 수있는 IDE를 사용하는 것에 비해 상당히 성가신 일입니다.
하나를 검색해 보았지만 구문 강조가 있지만 디버깅이없는 플러그인이나 작은 IDE 만 찾을 수있었습니다.
제목은 그것을 거의 요약합니다. 나는 Go를 시도하고 있는데, 인터랙티브 환경에서 원하는만큼 중단 점을 설정하고 스텝 인 / 오버 / 아웃 할 수 있다는 것이 정말 그리워요. 나는 gdb를 사용하여 Go를 디버깅 할 수 있다는 것을 알고 있지만 중단 점을 위해 gdb에 연결할 수있는 IDE를 사용하는 것에 비해 상당히 성가신 일입니다.
하나를 검색해 보았지만 구문 강조가 있지만 디버깅이없는 플러그인이나 작은 IDE 만 찾을 수있었습니다.
답변:
업데이트 : 개인적으로 GDB가 작동하는 동안 나는 Go에서 사용하는 팬이 아니며 피를 뱉을 것입니다. 좋은 대안에 대한 다른 답변을 확인하십시오.
예, 물론입니다 :)
Go에는 디버거 (GDB)가 있습니다.
사용 방법에 대한 공식 자습서 는 다음과 같습니다 .
'그래픽 디버깅'(즉, 편집기에서 중단 점 설정)을 원하는 경우 일부 IDE를 사용하여이를 수행 할 수 있습니다 (백그라운드에서 GDB 사용).
구체적으로 Eclipse, LiteIDE 및 Zeus는 모두 코딩 환경 (소스) 에서 중단 점을 설정하고 디버그 할 수 있도록합니다 . 다음은 Zeus로 수행하는 방법에 대한 비디오입니다 .
godebug
지난번에 꽤 좋았던 것을 사용했습니다.
go에 대한 GDB 지원에는 go 팀에서 해결하지 못하는 많은 문제가 있습니다.
자세한 내용 은 Rob Pike 의 게시물을 읽어보세요 .
기본 gdb 기능 (스택 추적, 값 인쇄)이 지원되는 플랫폼에서 작동하도록 노력할 것이지만 디버거를 사용하여 Go 프로그램의 전체 환경을 이해하는 기능은 작동하지 않을 가능성이 높으며 gdb 지원을 개선하는 것은 팀의 우선 순위가 아닙니다. .
그들은 다른 디버깅 옵션을 찾고 있지만 지금까지는 구체적인 계획이 없습니다. 문서는 구식이며 runtime-gdb.py
go 1.2와 함께 제공 되는 스크립트는 python3 지원 (예 : 현재 Ubuntu)으로 컴파일 된 GDB에서 작동하지 않습니다.
2017 업데이트 : 아래에 언급 된 godebug 프로젝트가 이제 공식적으로 derekparker / delve 로 대체되었습니다 .
원래 답변 :
이제 (2015 년 3 월) 코드 계측을 기반으로 한 또 다른 접근 방식이 있습니다.
godebug
소스 코드 생성을 사용하여 디버깅 호출로 프로그램을 계측합니다 .
go tool cover
코드 커버리지에 유사한 접근 방식을 취합니다.
- 를 실행하면
godebug
프로그램, 계측기 함수 호출, 변수 선언 및 명령문 행을 구문 분석하고 결과 코드를 어딘가에 출력합니다 (현재는 stdout 또는 원본 파일 위에 위치).- 이 수정 된 코드를 실행할 때 중단 점을 어딘가에 둔다고 가정하면 단계별로 실행하고 변수를 검사 할 수 있습니다.
추후 제공 : 임의의 Go 표현식을 평가하고 변수에 씁니다.
2015 년 6 월 업데이트 :
"일부"가 바라는 것처럼 상호 작용하지 않을 수도 있지만 여전히 높이 평가되고 있습니다 ( "단계별"기능 포함 ).
" Go에는 디버거가 있습니다. 정말 대단합니다! "(Cloudfare)
여기에 멋진 부분
ptrace
이 있습니다. 이식 할 수없는 6 개의 다른 인터페이스 와 씨름하는 대신godebug
소스 코드를 다시 작성godebug.Line
하고 모든 줄,godebug.Declare
모든 변수 선언 및godebug.SetTrace
중단 점 (예 : 입력하는 위치에 관계없이_ = "breakpoint"
) 에 대해 함수 호출을 삽입합니다 .이 솔루션은 훌륭합니다.
여기서 얻을 수있는 것은 일반 바이너리에서와 마찬가지로 스테이징 서버에 드롭 할 수있는 (교차 컴파일 된) 디버그 지원 바이너리입니다 .중단 점에 도달하면 프로그램은 인라인을 중지하고 stdin에서 사용자를 기다립니다.
우리가 좋아하는 디버깅에 적용하는 것은 Go의 단일 바이너리, 제로 종속성 철학입니다. 서버에 대한 도구 나 권한없이 어디서나 빌드하고 어디서나 실행됩니다.
ifdef GODEBUG
GOPATH="${PWD}" go install github.com/mailgun/godebug
GOPATH="${PWD}" ./bin/godebug build -instrument "${GODEBUG}" -o bin/rrdns rrdns
디버깅은
make bin/rrdns GODEBUG=rrdns/...
멀리 떨어져 있습니다.
최신 정보:
확인한 결과 버전 : 2016.1.3, 빌드 : 145.1617.8, 릴리스 날짜 : 2016 년 6 월 5 일이 Delve에서 작동한다고보고하게되어 기쁩니다! 여기에서 다운로드 할 수 있습니다 : https://www.jetbrains.com/idea/download/ . 또한 여기에서 Delve 설치 지침을 따르십시오 : https://github.com/derekparker/delve/tree/master/Documentation/installation
약간 벗겨집니다. OSX 로그인 프롬프트를받은 직후 대화 형 디버깅이 작동하기 시작했습니다. 때로는 간단한 .go 프로그램을 디버깅하여 시작해야합니다. 그러나 그것은 작동하고 내가 본 Go에 대한 최고의 대화식 디버깅 경험입니다.
원래 게시물 :
golang 대화 형 디버거가 있습니까? 예.
사용할 가치가있는 golang 인터랙티브 디버거가 있습니까? 아니.
Mac에서 GDB를 구성하는 것은 지루하지만 가능합니다.
그러나 사용을 시작하면 곧 설치 시간을 낭비했다는 것을 알게 될 것입니다.
IntelliJ를 사용하도록 구성 할 수도 있습니다.
IntelliJ, LiteIDE, CGDB 등이 제공하는 유일한 가치는 Go에 대한 GDB 디버깅 지원이 극도로 열악하다는 것을 더 빨리 확인할 수 있다는 것입니다.
이를 사용하여 Go 코드를 단계별로 실행할 수 있지만 매우 간단한 변수 값 이외의 값을 인쇄하려고하면 괜찮은 디버거를 원하는 시간을 낭비하게됩니다.
다음은 CGDB를 사용하여 map [string] string 데이터 구조의 값을 인쇄하려고 할 때 발생하는 일의 예입니다.
(gdb) print params
$1 = (github.com/go-martini/martini.Params) 0x15582 <runtime.reentersyscall+450>
... 완전히 쓸모가 없습니다.
다음으로 시도해보십시오.
(gdb) print params["UserID"]
... 그리고 "버스 오류"가 발생합니다.
Delve ( https://github.com/derekparker/delve )는 Go로 작성 되었기 때문에 유망 해 보이지만 IDE를 통하지 않고 콘솔을 사용하여 구동합니다.
Go에서 대화 형 디버깅을 지원하는 적절한 작업을 수행 한 IntelliJ (또는 다른 IDE)의 엔터프라이즈 버전에 대해 기꺼이 지불 할 것입니다.
지금은, fmt.Printf("%v", variable)
그것이 얻는만큼 좋습니다.
편집하다
GO 디버거는 이제 IntelliJ 또는 PyCharm의 간단한 플러그인이므로 다른 것을 설치할 필요가 없습니다. 플러그인 환경 설정에서 Go 플러그인을 찾으십시오.
원문 답변 (2015 년 11 월)
2015 년 11 월 말 현재 최신 정보를 찾는 분 :
탐구하다
https://github.com/derekparker/delve
빌드 / 설정 지침을 따르십시오.
https://github.com/derekparker/delve/wiki/Building
최신 IntelliJ (15) 또는 PyCharm (5) 받기
https://www.jetbrains.com/idea/download/
선택한 IDE에서 go-lang-plugin을 가져옵니다.
Pycharm -> Preference -> plugins -> search for go
current version is Version: 0.10.749
IntelliJ -> Preference -> plugins -> search for go
current version is Version: 0.10.749
실행할 패키지 또는 파일을 정의하십시오.
설정이 완료되면 이제 재생 아이콘과 디버그 아이콘이 활성화되고 평소와 같이 중단 점, 감시 등을 설정할 수 있습니다.
건배
나는 GDB를 둘러싼 작은 저주 래퍼 인 CGDB를 행복하게 사용하고 있습니다.
이동 중에 IDE 디버그가 가능합니다 (다시), 실제로 작동합니다 !
Delve 는 Mac OS X에서 잘 작동하며 IntelliJ IDEA Go Lang 플러그인에서 지원됩니다 .
Mac OSX, IntelliJ Idea 14, Go 1.5.1, Delve 0.5에서 테스트했습니다.
자체 서명 된 인증서를 만들고 시스템 링에 추가하는 등의 일반적인 루프를 실행해야했습니다 (Mac OS X에서 디버거를 실행하는 데 필요함). 마지막으로 IntelliJ 내부에 GO 프로젝트를 설정하고 중단 점 설정, 변수 검사, 단일 스테핑과 같은 일반적인 IDE + 디버거 기능을 되 찾는 데 보답했습니다.
코드를 디버그하기 위해 값을 인쇄하는 것보다 더 좋습니다.
옵션 1-GDB https://golang.org/doc/gdb
Visual Studio를 코드 의와 이동 플러그인 (아직 사용 탐구).
저는 개인적으로 옵션 3을 사용합니다.이를 위해서는 delve를 설치 해야합니다 .
이 비디오는 작동중인 디버깅을 보여줍니다 : https://youtu.be/uBjoTxosSys?t=16m11s (전체 비디오는 매우 흥미 롭습니다).
기본적으로 Go를 지원하는 Intellij 인 Gogland ( https://www.jetbrains.com/go/ ) 에 매우 만족 합니다. 그들이 이것을 개발함에 따라 계속 좋아지는 작동하는 디버거가 있습니다. 2017 년 1 월부터 사용 해왔고 2016 년 MBP에서 대부분 안정적이었습니다.
Goland는 Go 개발을위한 인체 공학적 환경을 제공하기위한 JetBrains의 새로운 상용 IDE 코드 명입니다.