2009-02-24 15 views
11

Envío de detalles de la excepción no controlada desde global.asax. ¿Cómo puedo obtener la ruta o el nombre del archivo aspx o el archivo de ensamblaje donde no se manejó una excepción?Excepciones no controladas con Global.asax

Esta información se mostraba en el seguimiento de la pila de la excepción cuando estaba desarrollando las pruebas &. Cuando implementé global.asax en la producción, esta información ya no aparece en el seguimiento de la pila.

¿Hay alguna manera de llegar a esta información mientras construyo mi objeto MailMessage en Global.asax?

Gracias

Respuesta

12

Si se trata de una aplicación ASP.NET, que la etiqueta sugiere que es, debería ser capaz de hacer algo como esto ... La ctx.Request.Url.ToString() le daría el nombre de archivo de donde el error ocurrió

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

Impresionante. ¡Gracias! –

+0

HttpContext.Current.Url te da la URL actual. Pero la pregunta fue sobre la ruta y/o el nombre del archivo del ensamblaje. – RoadWarrior

+0

@RoadWarrior: Dado que es una aplicación ASP.NET, es probable que la URL sea lo suficientemente buena. Como él aceptó la respuesta, supongo que satisface sus necesidades. – RSolberg

0

en Visual Studio, debe configurar la versión de lanzamiento para generar símbolos de depuración. A diferencia de la compilación de depuración, esto no está configurado por defecto. Esto le dará el seguimiento completo de la pila de excepción.

Incluso entonces, las optimizaciones realizadas por el compilador JIT (como la alineación) pueden significar que no se obtiene el número de línea correcto en el seguimiento de la pila. Si quiere estar seguro del número de línea, también puede configurar la versión de lanzamiento como "sin optimización". Pero esto puede significar que su aplicación tiene un menor rendimiento y/o rendimiento (este último tiende a ser más importante en una aplicación web).

EDIT: Puede encontrar la configuración "generar símbolos de depuración" yendo a la ventana del Explorador de soluciones, haciendo clic derecho en el proyecto y seleccionando la opción de menú "Propiedades". Luego vaya a Propiedades de configuración> Compilar> Generar información de depuración y configure como verdadero o falso. La configuración de Optimize Code está en la misma ventana.

+0

¿Cómo se hace esto? –

Cuestiones relacionadas