【问题标题】:Golang debug using GDB?使用 GDB 调试 Golang?
【发布时间】:2014-09-02 03:32:37
【问题描述】:

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

1) Go build GCC flags 

当我运行“go build”时,Go builder 使用哪些 gcc 标志来构建程序? build 值是否与 go 环境中设置的“GOGCCFLAGS”相同?

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

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

2) 如何在 GDB 中打印一个值 我按照这里的教程GDB debug go tutorial,但似乎值不是我设置的。

顺便说一句,我注意到有一篇关于它的帖子gdb debug go 但是,对我也不起作用。

【问题讨论】:

    标签: go gdb


    【解决方案1】:

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

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

    - gdbtest/
      - main.go
    

    以下面的例子ma​​in.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)
    }
    

    将其保存到 ma​​in.go。然后使用以下gcflag 标志进行编译。

    go build -gcflags "-N"

    用你新建的 golang 应用打开 gdb

    gdb gdbtest
    # or 
    gdb <PROJECT_NAME>
    

    您现在可以完全控制 gdb。例如,用br &lt;linenumber&gt;命令添加断点,然后用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)
    

    现在你可以打印所有的局部变量了

    (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}
    

    【讨论】:

      【解决方案2】:

      Go 不适用于 GDB,已知问题之一是值的打印。

      更多详情请见here

      【讨论】:

      • 谢谢,有什么替代 GDB 的选项?
      • 没有其他选择 - 看看here
      【解决方案3】:

      接受的答案已过时。 如果您使用标志 -gcflags=all="-N -l" 构建,Golang 目前可与 GDB(包括本地)一起使用,如 official documentation 中所述

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 2017-03-17
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        相关资源
        最近更新 更多