Как получить больше деталей из исключения? - PullRequest
4 голосов
/ 19 марта 2012

У меня есть веб-приложение .NET 4.0, которое реализует обработчик ошибок в событии Application_Error в Global.asax.

Когда возникает исключение, оно перехватывает его и отправляет мне электронное письмо, включающее различную информацию, такую ​​как зарегистрированный пользователь, страницу, на которой произошла ошибка, содержание сеанса и т. Д.

Это все замечательно, но мне не хватает какой-то фундаментальной детализации, которую я не могу найти.

Например, это подмножество полученной мной ошибки и связанной трассировки стека:

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)

Теперь, как бы прекрасно это ни было, я мог бы знать, а) имя элемента управления и б) значение, из-за которого элемент управления «вышел за пределы диапазона».

Любые предложения о том, как я могу получить такую ​​информацию? Я запустил это в режиме отладки, и объекты, переданные в Global.asax, похоже, не содержат больше деталей, которые я вижу.

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Отправляйте ваши PDB вместе со своими сборками.Таким образом, вы получите номера строк и имена файлов исходного кода в трассировке стека исключений.И когда у вас есть номера строк, вы знаете, какой код вы написали в этой строке.

0 голосов
/ 21 марта 2012

Я не смог выполнить свое требование, не внедрив некоторый пользовательский код.

Я добавил некоторый код в MasterPage, который сохраняет параметры __EVENTTARGET и __EVENTARGUMENT при каждой обратной передаче. Они очищаются при загрузке новой страницы. Если возникает ошибка, эти значения формируют часть отладочного электронного письма, что позволяет нам понять, что пользователь делал, когда произошла ошибка.

0 голосов
/ 19 марта 2012

Вы можете показать такое исключение следующим образом

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