Qtの基礎 - 例外処理
提供: MochiuWiki : SUSE, EC, PCB
概要
全ての例外をキャッチする方法
標準の設定では、NULLポインタのアクセスや0除算等で発生する例外をキャッチすることができない。
char *p = nullptr;
try
{
qDebug() << "try";
*p = 'A';
}
catch(...)
{
qDebug() << "catch";
}
qmakeで生成されたMakefileを見ると、-EHscオプションが付加されている。
/EHsまたは/EHscを使用する場合、catch句では、非同期構造化例外がキャッチされない。
構造化例外とは、ハードウェア例外を含むシステム的な例外のことで、
Windowsでは、SEH(Structured Exception Handling : 構造化例外処理)という仕組みが提供されている。
全ての例外をキャッチするには、プロジェクトファイル(.pro)に、以下の設定を追記する。
win*
{
QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
QMAKE_CXXFLAGS_STL_ON = /EHa
}
linux*
{
QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
QMAKE_CXXFLAGS_STL_ON = /EHa
}
ビルドして生成されたMakefileには、上記で設定した-EHaオプションが付加される。
この状態で、上記のサンプルコードを実行すると、例外をキャッチすることができる。