golang 대화 형 디버거가 있습니까? [닫은]


85

제목은 그것을 거의 요약합니다. 나는 Go를 시도하고 있는데, 인터랙티브 환경에서 원하는만큼 중단 점을 설정하고 스텝 인 / 오버 / 아웃 할 수 있다는 것이 정말 그리워요. 나는 gdb를 사용하여 Go를 디버깅 할 수 있다는 것을 알고 있지만 중단 점을 위해 gdb에 연결할 수있는 IDE를 사용하는 것에 비해 상당히 성가신 일입니다.

하나를 검색해 보았지만 구문 강조가 있지만 디버깅이없는 플러그인이나 작은 IDE 만 찾을 수있었습니다.


이 질문에 땅을 다른 사람이, 확인하십시오 당신은 GDB에 대한뿐만 아니라 (현재 가능) 한 다른 답변을 확인
— 레이

답변:


38

업데이트 : 개인적으로 GDB가 작동하는 동안 나는 Go에서 사용하는 팬이 아니며 피를 뱉을 것입니다. 좋은 대안에 대한 다른 답변을 확인하십시오.


예, 물론입니다 :)

Go에는 디버거 (GDB)가 있습니다.

사용 방법에 대한 공식 자습서 는 다음과 같습니다 .

'그래픽 디버깅'(즉, 편집기에서 중단 점 설정)을 원하는 경우 일부 IDE를 사용하여이를 수행 할 수 있습니다 (백그라운드에서 GDB 사용).

구체적으로 Eclipse, LiteIDE 및 Zeus는 모두 코딩 환경 (소스) 에서 중단 점을 설정하고 디버그 할 수 있도록합니다 . 다음은 Zeus로 수행하는 방법에 대한 비디오입니다 .


2
후속 조치로 저는 Mac을 사용하고 있으며 IntelliJ go 플러그인을 사용하여 개발을 매우 훌륭하고 쉽게 만들었지 만 LiteIDE는 디버깅에 정말 훌륭합니다 (완벽하지는 않지만 잘 작동합니다). 업데이트 된 GDB를 설치해야만 작동이 가능해졌습니다.
— Daniel Williams

4
많은 문제가 있으며 (기본 기능을 제외하고) 향후 go 팀에서 지원하지 않을 것입니다. 아래 내 답변을 참조하십시오
— metakeule

이동중인 GDB는 오래 전에 중단되었으며 더 이상 작동하지 않습니다. 받아 들여진 대답은 완전히 틀렸다.
— Michele Giuseppe Fadda 2015

@ user4839438 어, 처음 두 줄은 문자 그대로 "이동 중에 gdb를 사용하지 마십시오"입니다. 나는 개인적으로 godebug지난번에 꽤 좋았던 것을 사용했습니다.
— Benjamin Gruenbaum 2015

맞습니다.하지만 제목은 "Go has a debugger (gdb)"라고 되어 있는데, 실제로는 더 이상 사실이 아니며 현재는 서비스가 안됩니다. GDB는 이전 버전의 golang과 함께 작동했지만 작동하도록 노력하는 것은 큰 문제였으며 결국 작동하지 않았고 작동하지 않을 수도있었습니다. 저는 Dwelve와 함께 행복한 강아지입니다 . godebug 도 시도해 볼게요 .
— Michele Giuseppe Fadda 2015

29

go에 대한 GDB 지원에는 go 팀에서 해결하지 못하는 많은 문제가 있습니다.

자세한 내용 은 Rob Pike 의 게시물을 읽어보세요 .

기본 gdb 기능 (스택 추적, 값 인쇄)이 지원되는 플랫폼에서 작동하도록 노력할 것이지만 디버거를 사용하여 Go 프로그램의 전체 환경을 이해하는 기능은 작동하지 않을 가능성이 높으며 gdb 지원을 개선하는 것은 팀의 우선 순위가 아닙니다. .

그들은 다른 디버깅 옵션을 찾고 있지만 지금까지는 구체적인 계획이 없습니다. 문서는 구식이며 runtime-gdb.pygo 1.2와 함께 제공 되는 스크립트는 python3 지원 (예 : 현재 Ubuntu)으로 컴파일 된 GDB에서 작동하지 않습니다.


25
그것은 지금 채택되기 시작하는 언어에 대해 안심이되지 않습니다
— Valerio

2
@ ValerioColtrè 나는 디버거가 필요하지 않았습니다. 단위 테스트와 Printf ( "% # v", ...)는 지금까지 저를 잘 제공했습니다 ...
— metakeule

20
@metakeule 누구에게도 디버거가 필요하지 않지만 좋은 디버거는 특히 실패한 테스트를 디버깅 할 때 디버깅에 매우 유용하고 더 효율적이라는 것을 증명할 수 있습니다. 또한 디버거는 코드를 변경하지 않지만 print 문은 변경합니다.
— gotgenes 2014 년

GDB 문서에서 : "GDB는 Go 프로그램을 잘 이해하지 못합니다. 스택 관리, 스레딩 및 런타임에는 GDB가 프로그램이 gccgo로 컴파일 된 경우에도 디버거를 혼동 할 수 있다고 예상하는 실행 모델과 충분히 다른 측면이 포함되어 있습니다. GDB는 일부 상황에서 유용 할 수 있지만 그 결과는, 그것은 "바둑 프로그램, 특히 많이 동시 사람을위한 신뢰할 수있는 디버거 아니다
— masukomi

Go는 디버거와 어떻게 작동합니까? "사용자 지정 Go 디버거에 대해 잠시 이야기했지만 아직 없습니다." 러스 콕스
— 이반 차우

24

2017 업데이트 : 아래에 언급 된 godebug 프로젝트가 이제 공식적으로 derekparker / delve 로 대체되었습니다 .


원래 답변 :

이제 (2015 년 3 월) 코드 계측을 기반으로 한 또 다른 접근 방식이 있습니다.

mailgun / godebug :

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/...멀리 떨어져 있습니다.


Godebug 지금은 사용되지 않으며 그들은 대신 탐구를 사용하는 것이 좋습니다
— Alexandro 드 올리베이라에게

@AlexandrodeOliveira 감사합니다. 그에 따라 답변을 업데이트했습니다.
— VonC

탐구를 시도하는 것은 꽤 잘 작동하는 것 같습니다. 괜찮은 오픈 소스 도구에 대한이 답변은 질문을 덜 "주제에서 벗어난"것으로 만듭니다. 닫힌 도구를 평가하고 싶지 않습니다. 질문을 다시 만들어야 할 수도 있지만 gdb (gdb)를 찾은 후 대안을 검색하는 것이 실제로 권장되지 않는다고 들었습니다.
— Gerry Gleason

15

최신 정보:

확인한 결과 버전 : 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)그것이 얻는만큼 좋습니다.


더 이상은 아닙니다! 오래된 대답.
— Michele Giuseppe Fadda 2015 년

mailgun / godebug는 크게 개선되었습니다. 사용할 가치가 있습니다. 그러나 사용할 가치가있는 것은 통합 된 대화 형 디버거가있는 IDE입니다. 콘솔에서 디버깅하는 것은 80 년대의 디버깅을 연상시킵니다. 내 Go 코드에 계측을 추가하는 것은 작동하지만 약간 방해가됩니다. 중단 점을 설정 (해제)하려면 코드 행을 클릭 (해제)하는 것이 좋습니다.
— l3x

다시 말하겠습니다 ... 디버거 개발 + 인텔리 전 아이디어 IDE.!
— Michele Giuseppe Fadda

안녕하세요 user4839438, 방금 귀하의 게시물을 발견했습니다. 그것을 시도 할 것입니다. 작동한다면 JetBrains 업그레이드 비용을 지불 할 가치가있을 것입니다. 나에게 중요하지는 않지만 Delve 디버거가 MS Visual Studio에서 작동한다고 들었습니다. marketplace.visualstudio.com/items/lukehoban.Go를
— l3x

1
확인한 결과 버전 : 2016.1.3, 빌드 : 145.1617.8, 릴리스 날짜 : 2016 년 6 월 5 일이 Delve에서 작동한다고보고하게되어 기쁩니다! 여기에서 다운로드 할 수 있습니다 : jetbrains.com/idea/download . 또한 여기에서 Delve 설치 지침을 따르십시오. github.com/derekparker/delve/tree/master/Documentation/…
— l3x

9

편집하다

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
  1. 새 Go 프로젝트를 설정하거나 프로젝트를 가져옵니다.
  2. 메시지에 따라 Go SDK 설정
  3. Go 라이브러리 설정 (일반적으로 GOROOT / src
  4. '재생'아이콘으로 오른쪽 상단 모서리에있는 애플리케이션 실행 구성을 설정합니다.
  5. 구성 편집-> + 클릭-> 애플리케이션 이동

실행할 패키지 또는 파일을 정의하십시오.

설정이 완료되면 이제 재생 아이콘과 디버그 아이콘이 활성화되고 평소와 같이 중단 점, 감시 등을 설정할 수 있습니다.

건배


평가 / 감시 나를 위해 작동하지 않음 : 기호 값을 찾을 수 없습니다 ...이 문제를 해결할 수 있습니까?
— Stefan Wuthrich-Altafino

PyCharm 5.0.3 CE 및 IntelliJ IDEA 15.0.2
— MrE

실제로 delve를 빌드 할 필요가 없으며 플러그인이 자동으로 번들로 제공됩니다.
— dlsniper

@dlsniper이 최근인가요? 시도했을 때 한동안 go 플러그인을 설치했지만 업그레이드했지만 delve를 빌드 할 때까지 작동하지 않았습니다.
— MrE

@MrE delve는 약 3 개월 전 통합 된 이후 플러그인과 함께 제공되었습니다. 그러나 Linux 및 Mac OS X 모두 64 비트에서만 작동합니다.
— dlsniper


7

이동 중에 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 + 디버거 기능을 되 찾는 데 보답했습니다.

코드를 디버그하기 위해 값을 인쇄하는 것보다 더 좋습니다.


IntelliJ로 설정하는 방법을 설명해 주시겠습니까? 디버거는 HTTP 끝점으로 실행되어야합니다. 그렇지 않습니까?
— MrE

신경 쓰지 마세요 ... 문서 등을 찾았지만 상자에서 작동하려면 최신 버전의 PyCharm 또는 IntelliJ가 필요합니다.
— MrE dec.

나는 특별한 작업을하지 않았고, 방금 Dvelve와 intelliJ 14를 설치했습니다. 여전히 IntelliJ 15에서 제대로 작동합니다. 이전 버전에 대해 : 모르겠습니다.
— Michele Giuseppe Fadda 2015

7
  1. 옵션 1-GDB https://golang.org/doc/gdb

  2. 동굴

  3. Visual Studio를 코드 의와 이동 플러그인 (아직 사용 탐구).

저는 개인적으로 옵션 3을 사용합니다.이를 위해서는 delve를 설치 해야합니다 .

이 비디오는 작동중인 디버깅을 보여줍니다 : https://youtu.be/uBjoTxosSys?t=16m11s (전체 비디오는 매우 흥미 롭습니다).


Delve는 뒤쳐져 있지만 다른 IMO보다 여전히 낫습니다.
— Ostati

1
이 IMO가 최고의 답변입니다. 옵션 # 3 또한 다중 플랫폼 솔루션입니다. Delve에는 몇 가지 제한 사항이 있지만 기본적인 시각적 디버깅이 잘 작동합니다.
— 기드온

1

기본적으로 Go를 지원하는 Intellij 인 Gogland ( https://www.jetbrains.com/go/ ) 에 매우 만족 합니다. 그들이 이것을 개발함에 따라 계속 좋아지는 작동하는 디버거가 있습니다. 2017 년 1 월부터 사용 해왔고 2016 년 MBP에서 대부분 안정적이었습니다.

Goland는 Go 개발을위한 인체 공학적 환경을 제공하기위한 JetBrains의 새로운 상용 IDE 코드 명입니다.


아주 좋아요! LiteIDE는 조금 ... 너무 가볍습니다. 나는 IntelliJ를 좋아하고 이것을 확인할 것입니다.
— Daniel Williams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.