4

我用调试标志编译了一个简单的 go 应用程序:

go build -gcflags "-N -l" -o main main.go

main.go

package main

import (
    "fmt"
    "time"
)

func main() {
    for i := 0; true; i++ {
        fmt.Println("number:", i)
        time.Sleep(time.Second)
    }
}

在 gdb 中,我附加到它pid并执行了breakbreak 11.

gdb --pid=<pid>

Gdb 报告断点已成功设置,但它们从未被命中。有没有办法让这个工作?

4

2 回答 2

1

注意:相同的设置(即使将您添加runtime-gdb.py到您的.gdbrc)有可能无法与 Ubuntu 13.10 一起使用,您会收到一条“ SyntaxError”消息,如下所示:

问题是 Ubuntu 13.10 将 GDB 与 Python 3.3 链接起来,而脚本 golang 发布的是用于 Python 2。有人已经提出了一个问题,并且它似乎已在上游修复(所以希望 Go 1.3 能够正常工作)。

幸运的是,向后移植修复很容易。只需将您的存在移开runtime-gdb.py并下载上游版本。

如果你$GOROOT/usr/local/go以下应该只是工作:

sudo mv /usr/local/go/src/pkg/runtime/runtime-gdb.py /usr/local/go/src/pkg/runtime/runtime-gdb.py.orig
cd /usr/local/go/src/pkg/runtime/
sudo wget https://go.googlecode.com/hg/src/pkg/runtime/runtime-gdb.py
于 2014-04-03T06:49:24.883 回答
1

go/src/pkg/runtime/runtime-gdb.py脚本需要加载到 gdb 中才能有效地调试 go 程序。

您可以将其添加到 .gdbrc 文件中。

于 2013-07-05T21:39:12.487 回答