我使用调试标志编译了一个简单的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
并执行了break
和break 11
。
gdb --pid=<pid>
Gdb报告断点已成功设置,但它们不会受到攻击。有没有办法让这个工作?
答案 0 :(得分:1)
需要在gdb中加载go/src/pkg/runtime/runtime-gdb.py
脚本才能有效地调试go程序。
您可以将其添加到.gdbrc文件中。
答案 1 :(得分:1)
注意:相同的设置(即使将runtime-gdb.py
添加到.gdbrc
)也有可能无法使用Ubuntu 13.10,您将收到“SyntaxError
”消息,如图所示在:
schmichael
)”
问题是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