GLibのエラーメッセージ出力時にabortする方法
目的
デバッグ中にGLibがエラーメッセージを出力することがある。 そのメッセージが致命的(CRITICAL)である場合は、十中八九アプリケーションにバグがある。 例えば、このようなメッセージだ。
GLib-GObject-CRITICAL **: g_object_unref: assertion `object->ref_count > 0' failed
デバッグの為にその原因を追跡しなければならない。
しかし、通常GLibは、致命的なメッセージを吐いても、 アプリケーションをを停止(abort)することはない。 セグメンテーションフォールト等で行き詰まるまで、実行し続けようとするのだ。 これでは、致命的なメッセージの原因をつかみにくい。
そこで、GLibがエラーメッセージを出力した時に、 アプリケーションを停止する方法を紹介する。
前提
(方法1) コマンド引数を指定する
コマンド引数に--g-fatal-warnings
を指定する。
./app --g-fatal-warnings
(方法2) 環境変数に指定する
環境変数G_DEBUG
にfatal-warnings
を設定する。
G_DEBUG=fatal-warnings ./app
GDBで使用する方法
- 方法1を使用する
gdb app (gdb) r --g-fatal-warnings
- 方法2を使用する
G_DEBUG=fatal-warnings gdb app (gdb) r
valaによるアプリケーションを開発中 http://gridraw.com/