2013-09-16 82 views
2

我最近通過線未捕獲的異常確定源

Try 
{ 
    Debug.WriteLine("ViewHelper before comObj.Send() "); 
    comObj.Send(); // a very old com component 
    Debug.WriteLine("ViewHelper after comObj.Send() "); 
} 
Catch (Exception Ex) 
{ 
    Debug.WriteLine("ViewHelper comObj.Send " + Ex.Message);  
} 

comObj.Send()找到了一個異常線的來源是拋出一個異常
異常崩潰的應用程序
,但它不是在抓上述嘗試捕捉
我在Visual Studio中的所有例外打破它,沒有違反該行
它陷入了一個全局錯誤處理程序App_DispatcherUnhandledException
如果我設置e.Handled = TRUE;它只是拋出了很多次,仍然崩潰的應用程序
異常沒有給出關於源
我發現來源是那些以前和調試語句後的唯一途徑信息
唯一的例外是在一百個電話扔在一個所以很難跟蹤

有沒有更快的方法來找到異常的來源?
有沒有辦法回到最後一行?

在後臺我應該專注於COM組件。

+0

它扔什麼?它聽起來並不像它投擲的東西真的是被抓到的,你可能在應用程序崩潰時更好地在故障點進行調試。 (對於C++程序集,代碼生成 - >啓用C++異常)在這裏有很多控制。 – 2013-09-16 17:56:10

+0

@ebyrob如果我讓它崩潰,它不在那條線上。就像我說的那樣,直接嘗試捕捉並沒有抓住它。 – Paparazzi

+0

通過「崩潰」您的意思是核心轉儲沒有包含該行(或內存位置)在它的堆棧跟蹤? (我還假設你修改了默認處理程序:http://mike.woelmer.com/2009/04/dealing-with-unhandled-exceptions-in-wpf/) – 2013-09-16 18:12:31

回答

1

當我懷疑從本地代碼拋出異常時,啓用debugging of unmanaged code。從MSDN

要啓用的非託管代碼

  1. 調試,在Solution Explorer中選擇項目菜單上的一個項目,然後單擊屬性。

  2. 單擊調試選項卡。

  3. 選中啓用非託管代碼調試複選框。

這可能會降低性能,從而將其關閉時沒有調試本地組件。

我也會首先解決所有的異常,但是您提到您這樣做了,因此對於我來說,非託管調試將是下一步。

+0

是的,獲得了更多信息。 user32.dll中!_DdeClientTransaction @ 32()+ 0x3ac bytes [External Code]。 – Paparazzi