2014-09-02 3 views
3

GDB + golang에 대해 2 가지 질문이 있습니까?GDB를 사용하는 Golang 디버그?

1) Go build GCC flags 

"go build"를 실행하면 어떤 gcc 플래그가 Go 빌더를 사용하여 프로그램을 빌드합니까? 빌드 값은 Go 환경에서 설정된 "GOGCCFLAGS"와 동일합니까?

GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common" 

코드 기호를 추가 할 때 "-g"또는 "-g3"플래그가 표시되지 않기 때문입니다. 그렇다면 어떻게 심볼 테이블을 컴파일 할 수 있습니까?

2) GDB에서 값을 인쇄하는 방법 여기 GDB debug go tutorial 튜토리얼을 따랐지만 값은 내가 설정 한 값이 아닌 것 같습니다. 그런데

The value print 1, while actual is 1024

는, 나도 나를 위해 작동하지 않습니다, gdb debug go 그러나 그것에 대해 게시물이났습니다. the value is not what I set

답변

4

Go는 GDB와 잘 작동하지 않으며 알려진 문제점 중 하나는 값 인쇄입니다.

자세한 내용은 here입니다.

+0

고마워, GDB 대신에 어떤 옵션이 있니? – python

+4

다른 옵션이 없습니다 - 봐 [여기] (http://stackoverflow.com/questions/16492509/does-any-golang-interactive-debugger-exist/23387017#23387017) – metakeule

+3

나는 go-1.4.rc2를 시도했다. 그리고 그것은 gdb와 함께 작동하는 것 같습니다. –

9

Golang 지금 여기 GDB

작동 gdbtest

- gdbtest/ 
    - main.go 

그 주요 main.go에게 다음과 같은 예를

package main 

import "fmt" 

type MyStruct struct { 
    x string 
    i int 
    f float64 
} 

func main() { 
    x := "abc" 
    i := 3 
    fmt.Println(i) 
    fmt.Println(x) 

    ms := &MyStruct{ 
     x: "cba", 
     i: 10, 
     f: 11.10335, 
    } 
    fmt.Println(ms) 
} 

저장을 타고 예제 golang 응용 프로그램에게 있습니다. go. 그런 다음 아래의 gcflag 플래그로 컴파일하십시오. 새로 건설 golang 응용 프로그램

gdb gdbtest 
# or 
gdb <PROJECT_NAME> 

go build -gcflags "-N"

열기 GDB는 이제 GDB의 전체 제어 할 수 있습니다. 예를 들어, 이제 당신은 모든 지역 변수

을 인쇄 할 수 있습니다 다음 run

(gdb) br 22 
Breakpoint 1 at 0x2311: file /go/src/github.com/cevaris/gdbtest/main.go, line 22. 
(gdb) run 
Starting program: /go/src/github.com/cevaris/gdbtest/gdbtest 
3 
abc 

Breakpoint 1, main.main() at /go/src/github.com/cevaris/gdbtest/main.go:22 
22    fmt.Println(ms) 
(gdb) 

와 응용 프로그램을 실행 br <linenumber> 명령으로 중단 점을 추가

(gdb) info locals 
i = 3 
ms = 0x20819e020 
x = 0xdb1d0 "abc" 

심지어 포인터에 접근 할 수

(gdb) p ms 
$1 = (struct main.MyStruct *) 0x20819e020 
(gdb) p *ms 
$2 = {x = 0xdb870 "cba", i = 10, f = 11.103350000000001} 
관련 문제