我有一个.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)
现在我很可爱,因为我知道a)控件的名称和b)导致控件超出范围的值。
有关如何获取此类信息的任何建议?我在调试模式下运行它,传递给Global.asax的对象似乎不再包含我能看到的更多细节。
答案 0 :(得分:2)
将PDB与程序集一起发送。这样,您将在异常堆栈跟踪中获取行号和源代码文件名。一旦你有行号,就会知道你在那行写的是什么代码。
答案 1 :(得分:0)
如果没有实现一些自定义代码,我无法满足我的要求。
我现在在MasterPage中添加了一些代码,用于在每次回发时存储__EVENTTARGET和__EVENTARGUMENT参数。只要有新页面加载,就会清除它们。如果发生错误,这些值构成调试电子邮件的一部分,这使我们能够了解用户在发生错误时正在做什么。
答案 2 :(得分:-1)
您可以显示如下例外
try
{
}
catch(Exception ex)
{
Response.Write("Source: " + ex.Source);
Response.Write("Message: " + ex.Message);
Response.Write("Stack Trace: " + ex.StackTrace);
}