Go言語のコードをGDBでデバッグする
あらまし
Go言語のコンパイラgcがUnix系向けに吐くバイナリはDWARFのデバッグ用データを含んでいるから、GNU Debuggerを使ってデバッグできる。
何も考えずgo buildを実行すると、勝手にDWARFのデータが入る。デバッグ用データを省きたいときは、オプションに-ldflags "-s"
を指定する。
go build -ldflags "-s" prog.go
拡張スクリプト
GDBは拡張スクリプトが読み込める。gcに付いてくるGo言語用のスクリプトを使うと、マップ・スライス・チャネル型もちゃんと表示できるようになる。
もし、gdbでGoの出力したバイナリを開いた時に
warning: File "/home/mandel59/trees/go/src/pkg/runtime/runtime-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
みたいに表示されたら、 ~/.gdbinit ファイルに次のように書くと、ちゃんと自動的にスクリプトを読み込んでくれるようになる。パスは適宜書き換える。
add-auto-load-safe-path ~/trees/go/src/pkg/runtime/runtime-gdb.py
リファレンス
さらに詳しいやり方を知るにはこれを読む。
Debugging Go Code with GDB - The Go Programming Language