読者です 読者をやめる 読者になる 読者になる

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