gpt4 book ai didi

使用 GDB 进行 Golang 调试?

转载 作者:IT王子 更新时间:2023-10-29 01:22:10 25 4
gpt4 key购买 nike

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

1) Go build GCC flags 

当我运行“go build”时,Go 构建器使用哪些 gcc 标志来构建程序?构建值是否与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

最佳答案

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 <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)

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

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

关于使用 GDB 进行 Golang 调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com