Необработанные исключения с Global.asax - PullRequest
11 голосов
/ 25 февраля 2009

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

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

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

Спасибо

Ответы [ 2 ]

12 голосов
/ 26 февраля 2009

Если это приложение 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("me@me.com"));
    msg.From = new MailAddress("from@me.com");
    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");
}
0 голосов
/ 25 февраля 2009

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

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

РЕДАКТИРОВАТЬ : Вы можете найти параметр «генерировать символы отладки», перейдя в окно обозревателя решений, щелкнув правой кнопкой мыши по проекту и выбрав пункт меню «Свойства». Затем перейдите в «Свойства конфигурации»> «Сборка»> «Создать отладочную информацию» и установите значение «истина» или «ложь». Параметр «Оптимизировать код» находится в том же окне.

...