エンジニアなプログラマ

プログラミング(特にvala言語関連)の話題を取り上げていきます。

現在、新しいクラス図描画ソフトを開発中! http://gridraw.com/

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_DEBUGfatal-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/