2012-03-19 52 views
4

我有一個.NET 4.0 Web應用程序,它在Global.asax的Application_Error事件中實現了一個錯誤處理程序。如何從異常中獲取更多細節?

發生異常時此攔截,並派我在內的各種類的登錄用戶,頁面信息上發生錯誤的電子郵件,會議內容等

這是所有偉大的,但有一些基本的細節丟失,我似乎無法找到。

舉例來說,這是一個錯誤的一個子集,我會收到和相關的堆棧跟蹤:

Source: Telerik.Web.UI 

Message: Selection out of range 

Parameter name: value 

Stack trace: at Telerik.Web.UI.RadComboBox.PerformDataBinding(IEnumerable dataSource) 
    at Telerik.Web.UI.RadComboBox.OnDataSourceViewSelectCallback(IEnumerable data) 
    at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) 
    at Telerik.Web.UI.RadComboBox.OnDataBinding(EventArgs e) 
    at Telerik.Web.UI.RadComboBox.PerformSelect() 
    at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
    at Telerik.Web.UI.RadComboBox.DataBind() 
    at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() 
    at Telerik.Web.UI.RadComboBox.OnPreRender(EventArgs e) 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Control.PreRenderRecursiveInternal() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

現在一樣可愛,因爲這是我可以知道一個做)控制和B的名稱)導致控制超出範圍的值。

有關我如何獲得此類信息的任何建議?我已經在調試模式下運行這個,並且傳遞給Global.asax的對象似乎沒有包含我可以看到的更多細節。

+0

您需要在發生異常的地方捕捉異常,並從那裏登錄以獲取您要查找的信息。 – 2012-03-19 17:59:44

+0

您是否嘗試重寫['MasterPage.OnError(EventArge)'](http://msdn.microsoft.com/zh-cn/library/system.web.ui.templatecontrol.onerror.aspx)? – abatishchev 2012-03-19 18:00:57

+0

您如何獲取已顯示的數據?這個例外是不是包含你想要的信息?如果是這樣,你可能會運氣不好,除非你能夠添加更多的數據到拋出的異常... – Chris 2012-03-19 18:01:29

回答

2

隨您的裝配一起運送您的PDB。通過這種方式,您將在異常堆棧跟蹤中獲取行號和源代碼文件名。一旦你有行號,你就知道你在那行上寫了什麼代碼。

+0

我上面發佈的錯誤是所有調試選項打開並在IDE內運行 – cusimar9 2012-03-20 08:38:23

+0

@ cusimar9,您顯示的錯誤在某個Telerik組件內。你是否也有PDB?在這個堆棧跟蹤中,我們實際上看不到異常源自代碼的地方。 – 2012-03-20 08:41:32

+0

不,我沒有Telerik組件的PDB,這是第三方工具包。我對Telerik程序集內的WHERE不感興趣,發生異常時,我需要知道我的頁面上哪個控件導致了它。我的解決方案中有項目的PDB – cusimar9 2012-03-20 09:40:08

-1

您可以顯示這種例外如下

try 
{ 
} 
catch(Exception ex) 
{ 
    Response.Write("Source: " + ex.Source); 
    Response.Write("Message: " + ex.Message); 
    Response.Write("Stack Trace: " + ex.StackTrace); 
} 
+0

ex.ToString()? – Pankaj 2012-03-19 18:19:15

+0

我已經顯示所有信息(請參閱我的帖子),但並未顯示錯誤的所有詳細信息 – cusimar9 2012-03-20 08:39:49

+0

然後您還可以在異常中添加更多類似如下信息如果Button1_Click發生異常,則添加如Response.Write( 「PageName.aspx的Button1中引發的異常 – 2012-03-20 08:42:40

0

我無法履行而無需實現一些自定義代碼我的要求。

我現在在MasterPage中添加了一些代碼,每次回發時都存儲__EVENTTARGET和__EVENTARGUMENT參數。只要有新的頁面加載,這些都會被清除。如果發生錯誤,這些值構成調試電子郵件的一部分,這使我們能夠了解錯誤發生時用戶正在做什麼。

相關問題