2011-11-01 73 views
6

有沒有辦法在調試時禁用WPF非常惱人的異常封裝?禁用WPF異常封裝調試

一個例子是擁有一個文本框的窗口,文本框被綁定到一個屬性,該屬性上的getter引發了一個無法由表示框架處理的異常(拋出新的StackOverflowException()例)。

什麼,我應該看到的是

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

相反,我看到的是什麼...

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

因爲WPF的異常包裹的這個異常有時也抓住了,然後出動要麼在MS.Internals內重新生成或隱藏,並且不可能返回到實際的異常站點。這導致我們看到一個巨大的PresentationFramework.dll,PresentationCore.dll和WindowsBase.dll的調用堆棧,但沒有用戶代碼,除了App.Main()。

這發生在綁定,在創建過程中調用的事件,以及其他完全隨機的情況沒有押韻或原因(按鈕點擊時有例外,有時會這樣做給我)。現在是的,我可以查看異常中的堆棧跟蹤,但是堆棧跟蹤也非常沒有意義,因爲我無法返回到該框架以查看拋出時的變量。

+0

+1。我總是看到這個 - 如果我的窗口的構造函數拋出一個異常,我不得不深入到兩個InnerExceptions級別來找出實際的錯誤。 –

回答

3

通常在調試時我會使用調試 - >異常,並選擇拋出公共語言運行時異常。然後這將停止在拋出異常的時候。

Visual Studio 2010 Exceptions dialog with common language runtime exceptions ticked

+1

儘管此解決方案可行,但並不能完全解決特定的WPF問題。現在我被迫看到所有異常,即使它們被捕獲,如果我使用另一個內部拋出並捕獲誰知道什麼原因的第三個庫,這可能是一場真正的噩夢。我正在尋找的是一種僅查看WPF捕獲/重新拋出的未捕獲異常,發送到調試監聽器或以其他方式模糊的方法。 – NtscCobalt