2009-02-24 24 views
11

Wysyłam wiadomości e-mail z nieobsługiwanymi szczegółami wyjątków z pliku global.asax. W jaki sposób można uzyskać ścieżkę i/lub nazwę pliku pliku aspx lub zespołu, w którym wyjątek nie został obsłużony.Nieobsługiwane wyjątki z Global.asax

Ta informacja pojawiła się w śladzie stosu wyjątku podczas opracowywania testów &. Kiedy wdrożyłem plik global.asax do produkcji, informacje te nie są już wyświetlane w zapisie stosu.

Czy istnieje sposób, aby uzyskać dostęp do tych informacji podczas budowania mojego obiektu MailMessage w Global.asax?

Dzięki

Odpowiedz

12

Jeśli jest to aplikacja ASP.NET, którą sugeruje tag, powinieneś być w stanie zrobić coś takiego ... Ctx.Request.Url.ToString() dałoby ci nazwę pliku gdzie błąd wystąpił.

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"); 
} 
+0

Awesome. Dzięki! –

+0

HttpContext.Current.Url podaje aktualny adres URL. Ale pytanie o ścieżkę i/lub nazwę pliku zespołu. – RoadWarrior

+0

@RoadWarrior: Ponieważ jest to aplikacja ASP.NET, istnieje prawdopodobieństwo, że adres URL jest wystarczająco dobry. Ponieważ przyjął odpowiedź, zgaduję, że spełnia on jego potrzeby. – RSolberg

0

w Visual Studio, trzeba ustawić kompilacji uwolnienia do generowania symboli debugowania. W przeciwieństwie do kompilacji debugowania, nie jest to ustawione domyślnie. Da ci to pełny ślad stosu wyjątków.

Nawet wtedy, optymalizacje wykonane przez kompilator JIT (takie jak inlining) mogą oznaczać, że nie masz prawidłowego numeru linii w twoim śladzie stosu. Jeśli chcesz mieć pewność co do numeru linii, możesz także ustawić kompilację wydania na "brak optymalizacji". Może to jednak oznaczać, że Twoja aplikacja ma niższą wydajność i/lub przepustowość (ta ostatnia ma większe znaczenie w aplikacji internetowej).

EDIT: Można znaleźć „generowania symboli debugowania” ustawienie, przechodząc do okna Solution Explorer prawym przyciskiem myszy na projekt, a następnie wybierając „Właściwości” w menu. Następnie przejdź do Właściwości konfiguracji> Utwórz> Wygeneruj informacje o debugowaniu i ustaw na wartość true lub false. Ustawienie Optymalizuj kod znajduje się w tym samym oknie.

+0

Jak to zrobić? –

Powiązane problemy