使用gdb打印Go语言变量

5
在这个程序中,如何使用调试器中断执行并打印 i 的值?
package main

import "fmt"

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

我不能打印出i,但是我可以打印出x:

go build test.go
gdb test  
[...]Reading symbols from /home/ned/test...done.
(gdb) br 9
(gdb) run
(gdb) p i
No symbol "i" in current context.
(gdb) p x
$1 = "abc"

2
听起来变量i可能被编译器优化掉了。你尝试过调试构建吗? - sblom
@sblon,我该如何创建一个调试版本? - Santiago Corredoira
1
请在SCL中运行go build -gcflags '-N'以禁用优化。 - axw
1
@sblon,就是这样了,谢谢。你想把你的评论发表为答案,这样我就可以接受它吗? - Santiago Corredoira
@sblom,请帮忙做一下,不是为了积分,而是为了保持 SO 的整洁和可读性。 - Denys Séguret
1个回答

4

看起来变量 i 可能被编译器优化掉了。您尝试过使用调试版本吗?

您可以使用 go build -gcflags '-N'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接