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.