GDB - 连接并中断正在运行的Go应用程序

时间:2013-07-03 04:02:54

标签: gdb go

我使用调试标志编译了一个简单的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报告断点已成功设置,但它们不会受到攻击。有没有办法让这个工作?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  

问题是Ubuntu 13.10将GDB与Python 3.3联系起来,而golang发布的脚本是针对Python 2.有人已经提交了一个问题,它似乎是固定在上游的(所以期望Go 1.3到Just Work)。

     

幸运的是,向后移植修复很容易。只需移动存在的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