ftestというテストプログラムがあります。テストを含む .so ファイルをロードし、そこで見つかったテストを実行します。これらのテストの 1 つは、O/RM 用の Postgres データベース ドライバーを含む .so をロードして実行します。
Postgres ドライバーがその .so ファイル (またはリンク先であるが ftest はリンクしていないファイル) で定義されている例外をスローし、テスト フレームワークによってキャッチされると、例外デストラクタが segfault をトリガーします。
この segfault は、コンパイルされた例外が (dload を使用して) 動的にロードされた .so にある場合に必ず発生します。
この種のことは、同じアーキテクチャを持つ Windows で問題なく動作します。コア ライブラリからの例外のみを使用するように自分自身を制限したくはありません。アドインは、独自の例外クラスを自由に作成し、通常どおり処理できるようにする必要があります。
例外は std::exception のサブクラスです。例外がライブラリ (libpqxx など) で定義されている場合もあります。これは、例外が制御できない場合があることを意味します。
例外は、次のようなものを使用してスローされます。
throw exception_class( exception_arguments );
そして、次を使用してキャッチされます:
catch ( std::exception &e ) {
// handler code
}
これを機能させるために必要な特別なコンパイラ オプションはありますか? 経由で例外をスローするように切り替える必要がありthrow new exception_class( args )
ますか (実際にはこれを行いたくありません)。