🔍
GDBの便利な機能
GDBとはGNUプロジェクトが開発するデバッガーです。
デバッグは日常的にやっていても、デバッガーを直接使うことはあまりないかもしれません。
そんなデバッガーの便利な機能をC++向けに紹介したいと思います。
backtrace(bt)
バックトレース(スタックトレース)を取得できます。C++23でstacktraceが標準ライブラリに加わりましたが、それまではクラッシュしても他の言語のようにスタックトレースを出力してくれませんでした。そのためデバッグの難易度が高かったのですが、gdbを使えばスタックトレースを取得でき、frameコマンドでフレーム間を移動することも出来ます。
rbreak
正規表現にマッチする全ての関数にブレークポイントを設定できます。この機能はテンプレートクラスや関数をデバッグするときに便利です。正規表現はgrepのようなツールで使われる、標準的な文法で書けます。
例えば、
(gdb) rbreak std::set<.*>::insert
とすれば、任意のキーの型を持つstd::setのinsertにブレークポイントを設定出来ます。
また、rbreak file:regexのようにファイル名を指定すると、検索範囲をそのファイル内に限定できます。
condition
ブレークポイントに条件を追加し、その条件がtrueになった時に止まるよう指定できます。break ... if condでも条件を設定できます。最初の何回かを素通りさせたいだけであれば、ignoreコマンドを使うほうが簡単です。
Discussion