1

wxWidgets2.8.12 と boost::serialization を mingw4.6 と Eclipse CDT Juno で使用して、Windows 7 x64 で単純な GUI アドレス帳プログラムをコーディングしてきました。

boost::archive::text_iarchive と text_oarchive を使用してファイルとの間でエントリをシリアル化する機能をコーディングしているときに、起動時にプログラムが動作しなくなることがわかりました。単純に開始し、すぐに終了します。g++ はそれを正常にコンパイルし、stdout または stderr には何も書き込まれませんでした。gdb を使用して問題をさらに調査したところ、boost ライブラリによって実際に例外がスローされていることがわかりました。

それ自体は問題ではありません。問題は、この例外が Eclipse のどのコンソールにも表示されなかったことです。そのため、アプリケーション全体をステップ実行するまで、この例外が存在することさえ知りませんでした。例外自体は非常に簡単に解決できますが、この出力の欠如が原因で非常に問題があることが証明されています。デバッグ構成とリリース構成の両方でアプリケーションをビルドして実行すると、何も表示されません。

要するに、私の質問は次のとおりです。これらのライブラリの例外が出力されないのはなぜですか。適切に表示するにはどうすればよいですか? しばらく検索してもまだ役に立つものを見つけることができませんでした。もちろん、どんな支援もありがたいです。助けていただける方には、あらかじめ感謝いたします。

4

1 に答える 1

1

トップレベルでcatchブロックが必要になるset_unexpected()か、次のようなものを使用する必要がありますが、できることの1つです。

#include <boost/exception/diagnostic_information.hpp>

...

catch(...)
{
    std::cerr << "Unhandled exception!" << std::endl <<
    boost::current_exception_diagnostic_information();
    return 1; //or whatever...
}

もちろん、抜本的な前にブースト/標準例外を除外できcatch(...)ますが、アイデアは得られます。

編集:

例外が表示されない可能性があるもう 1 つの理由は、スタックの巻き戻し中に (何らかの理由で) 呼び出された場合です。その後、呼び出しterminateて停止します...

于 2013-01-13T19:36:05.047 に答える