GDB - 附加并中断正在运行的 Go 应用程序

Ili*_*oly 5 gdb go

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

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

主程序

package main

import (
    "fmt"
    "time"
)

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

在 gdb 中,我附加到它pid并执行了breakand break 11

gdb --pid=<pid>

Gdb 报告断点已成功设置,但从未命中。有办法让它发挥作用吗?

Von*_*onC 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
Run Code Online (Sandbox Code Playgroud)