Go
golang

Mac OS X 10.9 MavericksでgdbでGoのコードをデバッグする

More than 5 years have passed since last update.


概要


  • gdbのインストールと設定

  • デバッグ情報込みでGoのプログラムをビルド


gdbのインストールと設定


gdbのインストール

Lion (Xcode 4.2) からllvm-gccが標準になり、普通のgccが使えなくなったのにともなって、gdbもXcodeのcommandline toolsから外れ、lldbが標準になっている。

そのため、Goのデバッグをgdbで行う場合には自分でgdbを入れなければいけない。

自分はMacPortsを使ってインストールした。

$ sudo port install gdb


taskgatedの設定

gdbをインストールしただけでは動かなくて、taskgated(8)の設定も変更しなければいけない。これはTigerからSnow Leopardで使われていた、プロセスのアクセス制御方式を受け付けるように設定するため。

/System/Library/LaunchDaemons/com.apple.taskgated.plist を次のように変更する。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>POSIXSpawnType</key>
<string>Interactive</string>
<key>EnableTransactions</key>
<true/>
<key>Label</key>
<string>com.apple.taskgated</string>
<key>MachServices</key>
<dict>
<key>com.apple.taskgated</key>
<dict>
<key>TaskSpecialPort</key>
<integer>9</integer>
</dict>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/taskgated</string>
- <string>-s</string>
+ <string>-sp</string>
</array>
</dict>
</plist>

変更後に再起動する。


デバッグ情報込みでGoのプログラムをビルド

無事にgdbのインストールと必要な設定が終わったので、いよいよgdbでのデバッグを開始する。gdbでのデバッグをするためには、通常のgdbデバッグと同様にプログラムにデバッグ情報を埋め込まないといけない。詳しくは公式ドキュメントを参照のこと。

-gcflags "-N -l" を付与してビルドすれば良い。

$ go build foo.go -gcflags "-N -l"

あとは通常のgdbの操作と同様にデバッグを行う。ちなみにgdbをインストールしても、コマンドは ggdb となるのでそこだけ注意。


参考