Qtの基礎 - 例外処理
ナビゲーションに移動
検索に移動
概要
全ての例外をキャッチする方法
標準の設定では、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
オプションが付加される。
この状態で、上記のサンプルコードを実行すると、例外をキャッチすることができる。