2012-03-01 5 views
1

私のC++プログラムは、プログラムで処理されない例外をスローするので、デバッグモードではVSがそれを処理し、未処理の例外が発生したという事実についてのウィンドウを表示します。しかし、私はこの例外を表示することができます、それは未処理ですか?どのような型、何がオブジェクトの中に投げられているのですか?VS2010でデバッグモードで捕捉された未処理の例外を分析するにはどうすればよいですか?

答えて

3

あなたはブレイクしてステップインすることができます。コード通りに解析されるものがあれば、VSはハンドラまたは例外クラスのコンストラクタにステップインします。とにかくこれは私がVS2010でやってきた方法です。

例外オブジェクトのアドレスを知る必要がある場合は、それをウォッチウィンドウに貼り付けてベース例外クラスにキャストできます(例外がシステム例外ではなく、クラス階層が良いです)。

P.S. 中にブレークポイントを設定するために、独自の処理されていない例外ルーチンを持つことができます。

// global scope 
    LONG WINAPI my_unh_exc_hndlr(_EXCEPTION_POINTERS* excPtrs) 
    { 
     return EXCEPTION_CONTINUE_SEARCH; // Put a breakpoint here in IDE. 
    } 

// ... somewhere in the beginning of main() 
    SetUnhandledExceptionFilter(my_unh_exc_hndlr); 

処理されない例外が発生するたびに実行する必要があります。

ランダムにクラッシュする別のプログラムですか?ソースはありませんか?問題ない。特権が少ない場合を除いて、そこでハンドラルーチンを設定するコード(小さなDLL)を注入し、デバッグします。

0

ほとんどの場合、例外が発生すると、Visual Studioはプログラムを中断するオプションを含むダイアログボックスを表示し、コード内のどこに発生したのかを確認する必要があります。さらに、例外が発生する直前にオブジェクト、ポインタ、その他の値を分析することができます。これは、あなたがヒープの破損やそのような厄介なものを扱っていない限り、何がうまくいかないのかを知るのに十分なはずです。例外自体の詳細を知らなくても、もっと言い表すのは難しいです。

0

例外の情報がすべて表示されない場合は、Visual Studioでデバッグ設定を確認してください。 [デバッグ]メニューの[例外]をクリックします。そこからすべての例外を解除することができます。これにより、例外が発生したときにできるだけ早くデバッガを中断させる必要があります。

関連する問題