2012-07-31 8 views
5

可能性の重複:
How to print message from caught exception?スローされた例外のテキストはどこに行きますか?

謝罪これは基本的なまたは重複している場合 - 私が最初にいくつかの検索をしたが、これに答え何かを見つけることができませんでした。

私のような基本的な何かをする場合は、次の

throw exception("This thing didn't work"); 

私はそれを見ることができますか?文字列は、出力コンソール、スタックトレース、またはプロジェクトに関連付けられている.logファイルには表示されません。なぜ私はどこにも見えない場合は、そこに文字列を入れているのだろうかと思います。私はもちろんスタックトレースを使ってどこが爆破されたのかを見ることができますが、最初は例外があるという目的を破っています。

Javaでは、文字列を与えると、その文字列が出力のどこかに表示されます。 C++でこの動作を再現できるかどうかは不思議です。

+1

例外がキャッチされたときに見えると思います。それ以外の、おそらくクラッシュダンプ? – nhahtdh

+1

あなたは例外をキャッチしていますか? –

+2

これは技術的には無効です。あなたはMSライブラリ(Std :: Exceptionには文字列を取るコンストラクタがない)のバグを使用しています。しかし、あなたが 'std :: runtime_error("これはうまくいかなかった ")'に変更すればあなたのポイントは有効です。 –

答えて

1

文字列を表示するには、例外をキャッチする必要があります。 それは次のように最後の例外ハンドラを持ってすることが有用であり得る:GUIアプリケーションで

int main(int argc, char **argv) 
{ 
    try { 
     ... 
    } 
    catch(const std::exception& e) { 
     std::cout << "Uncaught exception: " << e.what() << std::endl; 
    } 
} 

あなたがメインのイベントループにcatch文を持っているし、メッセージボックスにエラーメッセージを表示することができます。

イベントドリブン非GUIアプリケーションでは、メインイベントループでcatchステートメントを使用して、エラーメッセージをログファイルに書き込むこともできます。

これらのメソッドでは、すべての例外が確実に表示されます。もちろん、ほとんどの例外は最後の手段の例外ハンドラに達する前に捕らえられるべきです。

+0

これはおそらくそれです。問題は、クラッシュのいくつかがライブラリ内のアサーションによって引き起こされ、それらをキャッチする方法がないように思われるので、最後の手段であるtry/catchでさえもすべてをキャッチしない... –

関連する問題