Подтвердить что ты не робот

Необработанные исключения с Global.asax

Я отправляю сообщения об отсутствии необработанных исключений из global.asax. Как я могу получить путь и/или имя файла aspx или файла сборки, где исключение не обрабатывалось.

Эта информация показывалась в трассировке стека исключений при разработке и тестировании. Когда я развертывал global.asax для производства, эта информация больше не отображается в трассировке стека.

Есть ли способ получить эту информацию, пока я создаю свой объект MailMessage в Global.asax?

Спасибо

4b9b3361

Ответ 1

Если это приложение ASP.NET, которое предлагает этот тег, вы должны иметь возможность сделать что-то вроде этого... Ctx.Request.Url.ToString() предоставит вам имя файла, где произошла ошибка.

protected void Application_Error(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();
    HttpContext ctx = HttpContext.Current;

    msg.To.Add(new MailAddress("[email protected]"));
    msg.From = new MailAddress("[email protected]");
    msg.Subject = "My app had an issue...";
    msg.Priority = MailPriority.High;

    StringBuilder sb = new StringBuilder();
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
    msg.Body = sb.ToString();

    //CONFIGURE SMTP OBJECT
    SmtpClient smtp = new SmtpClient("myhost");

    //SEND EMAIL
    smtp.Send(msg);

    //REDIRECT USER TO ERROR PAGE
    Server.Transfer("~/ErrorPage.aspx");
}

Ответ 2

В Visual Studio вам нужно установить сборку выпуска для генерации отладочных символов. В отличие от сборки debug, это не задано по умолчанию. Это даст вам полную трассировку стека исключений.

Даже тогда оптимизация, выполняемая компилятором JIT (например, inlining), может означать, что вы не получите правильный номер строки в вашей трассировке стека. Если вы хотите быть уверенным в номере линии, вы также можете установить сборку выпуска без "оптимизации". Но это может означать, что ваше приложение имеет более низкую производительность и/или пропускную способность (последний имеет тенденцию быть более важным в веб-приложении).

EDIT. Вы можете найти параметр "генерировать отладочные символы", перейдя в окно Solution Explorer, щелкнув правой кнопкой мыши по проекту и выбрав пункт меню "Свойства". Затем перейдите в Configuration Properties > Build > Generating Debugging Information и установите значение true или false. Параметр "Оптимизировать код" находится в одном окне.