高级编程语言Golang与GDB(在Mac上)

环境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.5

$ go version
go version go1.4.2 darwin/amd64

请参照以下的中文翻译:

作为唯一的选项

听说go1.4修复了dwarf的问题。

gdb 的安装

翻译:Mavericks 操作系统已经不再包含 GDB 了。

$ brew install homebrew/dupes/gdb
$ gdb -v
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.4.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

好的

在构建时添加选项

$ go build -o ./a -gcflags "-N -l" main.go

穿梭来回

https://golang.org/cmd/ld/ – 在-ldflags加上-w标记后,二进制文件将不再包含dwarf信息,以此来稍稍减少文件大小。

– 喂,是我!

使用GDB启动

$ gdb ./a

$GOROOT/src/runtime/runtime-gdb.py应该被加载,但在go1.4.2上无法正常运行。

在我所处的环境中,这是原因所在。

如果你试图执行,你会被生气的。

(gdb) r
Starting program: /Users/a12508/workspace/madrid-deploy/madrid-web/app/t/a
Unable to find Mach task port for process-id 43426: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

请参考此处创建自己的证明书。

在权限问题等情况下,如果无法在[System]内创建,也可以在[Login]中进行操作。

$ sudo gdb a

需要启动gdb才行

在完成之后,对已经通过brew install安装的gdb进行签名:

$ codesign -s gdb-cert /usr/local/Cellar/gdb/7.9/bin/gdb

当无法找到证书时,重新启动taskgated以使其识别证书。

(如果kill命令被执行,系统会自动重新启动。但hup命令尚未测试。)

$ pgrep taskgated
13
$ sudo pkill -KILL taskgated
Password:
$ pgrep taskgated
44791

太棒了,感觉真是清新爽快啊,就像穿上新内裤的新年元旦早晨一样,哟~(一想到不再需要打印调试了)。

广告
将在 10 秒后关闭
bannerAds