🔍

GDBの便利な機能

2024/04/16に公開

GDBとはGNUプロジェクトが開発するデバッガーです。
デバッグは日常的にやっていても、デバッガーを直接使うことはあまりないかもしれません。
そんなデバッガーの便利な機能をC++向けに紹介したいと思います。

backtrace(bt)

バックトレース(スタックトレース)を取得できます。C++23でstacktraceが標準ライブラリに加わりましたが、それまではクラッシュしても他の言語のようにスタックトレースを出力してくれませんでした。そのためデバッグの難易度が高かったのですが、gdbを使えばスタックトレースを取得でき、frameコマンドでフレーム間を移動することも出来ます。

rbreak

正規表現にマッチする全ての関数にブレークポイントを設定できます。この機能はテンプレートクラスや関数をデバッグするときに便利です。正規表現はgrepのようなツールで使われる、標準的な文法で書けます。

例えば、

(gdb) rbreak std::set<.*>::insert

とすれば、任意のキーの型を持つstd::setinsertにブレークポイントを設定出来ます。

また、rbreak file:regexのようにファイル名を指定すると、検索範囲をそのファイル内に限定できます。

condition

ブレークポイントに条件を追加し、その条件がtrueになった時に止まるよう指定できます。break ... if condでも条件を設定できます。最初の何回かを素通りさせたいだけであれば、ignoreコマンドを使うほうが簡単です。

参考文献

  1. Debugging with GDB

Discussion