2011-11-01 12 views
6

デバッグ時にWPFの非常に厄介な例外ラッピングを無効にする方法はありますか?デバッグ用のWPF例外ラッピングを無効にする

例は、テキストボックスを所有するウィンドウで、テキストボックスはプロパティにバインドされています。そのプロパティのゲッターは、プレゼンテーションフレームワークで処理できない例外をスローします(for new StackOverflowException()for例)。

この例外はまた時々キャッチしてから派遣されたWPFの例外ラッピングので私は何を見てする必要があるんだが...私が見ているものを

No Source Available 
    Call Stack Location: 
    PresentationFramework.dll!MS.Internal.Data.PropertyPathWorker.RawValue(int k) + 0x64 bytes 

代わり
 get 
     { 
      throw new StackOverflowException(); // < Exception happened here 
     } 

されていますMS内部で深く隠されているか、隠されているか、または実際の例外サイトに戻ることは不可能です。これにより、PresentationFramework.dll、PresentationCore.dll、およびWindowsBase.dllの巨大な呼び出しスタックが表示されますが、App.Main()を除くユーザーコードはありません。

これは、バインディング、作成中に呼び出されたイベント、および韻や理由のない完全にランダムな状況で発生します(ボタンのクリック時に例外が発生することがあります)。今、はい私は例外の中でスタックトレースを見ることができますが、スタックトレースもかなり無意味です。なぜなら、そのフレームに戻ってスロー時の変数を確認することができないからです。

+0

+1。私はこれを常に見ています。ウィンドウのコンストラクタが例外をスローすると、実際のエラーの内容を調べるために、2つのレベルのInnerExceptionsを調べなければなりません。 –

答えて

3

一般に、デバッグ時には、デバッグ - >例外を使用して、共通言語ランタイム例外にスローするように選択します。これは、例外がスローされた時点で停止します。

Visual Studio 2010 Exceptions dialog with common language runtime exceptions ticked

+1

このソリューションは機能しますが、特定のWPFの問題を正確に解決するわけではありません。今では、たとえ内部的にスローされ、どんな理由があるのか​​を知っている他の第3のライブラリを使用している場合、本当の悪夢になる可能性があるとしても、すべての例外を見ることを余儀なくされています。私が探しているのは、WPFがキャッチ/再スローしている、デバッグリスナーに送信している、またはそうでなければあいまいであることがわかっていない例外だけを見る方法です。 – NtscCobalt

関連する問題