🔍
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