使用GDB进行Golang调试?

pyt*_*hon 6 gdb go

我有2个关于GDB + golang的问题?

1) Go build GCC flags 
Run Code Online (Sandbox Code Playgroud)

当我运行"go build"时,Go构建器使用哪个gcc标志来构建程序?构建值与go环境中设置的"GOGCCFLAGS"相同吗?

GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
Run Code Online (Sandbox Code Playgroud)

因为我没有看到任何用于添加代码符号的"-g"或"-g3"标志.如果是,编译符号表怎么样?

2)如何在GDB中打印一个值我按照GDB调试教程中的教程,但似乎值不是我设置的.

值打印1,而实际值为1024

顺便说一句,我注意到有关于它的帖子gdb调试go 但是,对我来说也不起作用. 价值不是我设定的

cev*_*ris 13

Golang现在可以很好地与GDB配合使用

这是一个golang应用程序示例 gdbtest

- gdbtest/
  - main.go
Run Code Online (Sandbox Code Playgroud)

请参考以下示例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)
}
Run Code Online (Sandbox Code Playgroud)

保存到main.go.然后使用以下gcflag标志进行编译.

go build -gcflags "-N"

使用新构建的golang应用程序打开gdb

gdb gdbtest
# or 
gdb <PROJECT_NAME>
Run Code Online (Sandbox Code Playgroud)

您现在可以完全控制gdb.例如,使用br <linenumber>命令添加断点,然后使用执行应用程序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)
Run Code Online (Sandbox Code Playgroud)

现在您可以打印所有局部变量

(gdb) info locals
i = 3
ms = 0x20819e020
x = 0xdb1d0 "abc"
Run Code Online (Sandbox Code Playgroud)

甚至可以访问指针

(gdb) p ms
$1 = (struct main.MyStruct *) 0x20819e020
(gdb) p *ms
$2 = {x = 0xdb870 "cba", i = 10, f = 11.103350000000001}
Run Code Online (Sandbox Code Playgroud)


Fel*_*ima 6

接受的答案已过时。如果您使用 flags 进行构建,Golang 目前可以与 GDB(包括本地)一起使用,如官方文档-gcflags=all="-N -l"中所述


jus*_*sij 5

Go在GDB上不能很好地工作,已知问题之一是值的打印。

可以在此处找到更多详细信息。

  • 没有其他选择-看看[这里](http://stackoverflow.com/questions/16492509/does-any-golang-interactive-debugger-exist/23387017#23387017) (4认同)
  • 我尝试了go-1.4.rc2,它似乎可以与gdb一起使用。 (3认同)