2009-02-24 5 views
11

J'envoie par e-mail les détails d'exception non gérée de global.asax. Comment puis-je obtenir le chemin et/ou le nom de fichier du fichier aspx ou du fichier d'assemblage où une exception n'a pas été gérée.Exceptions non gérées avec Global.asax

Cette information apparaissait dans la trace de pile de l'exception lorsque je développais des tests &. Lorsque j'ai déployé global.asax en production, cette information n'apparaît plus dans la trace de la pile.

Existe-t-il un moyen d'accéder à cette information pendant que je construis mon objet MailMessage dans Global.asax?

Merci

Répondre

12

S'il s'agit d'une application ASP.NET, ce que le tag suggère, vous devriez être capable de faire quelque chose comme ça ... Le ctx.Request.Url.ToString() vous donnerait le nom du fichier où l'erreur est survenue.

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

Génial. Merci! –

+0

HttpContext.Current.Url vous donne l'URL actuelle. Mais la question a demandé le chemin et/ou le nom de fichier de l'assemblée. – RoadWarrior

+0

@RoadWarrior: Comme il s'agit d'une application ASP.NET, il y a de fortes chances que l'URL soit assez bonne. Depuis qu'il a accepté la réponse, je suppose que cela répond à ses besoins. – RSolberg

0

Dans Visual Studio, vous devez définir la version release pour générer des symboles de débogage. Contrairement à la version de débogage, elle n'est pas définie par défaut. Cela vous donnera la trace de pile d'exception complète.

Même dans ce cas, les optimisations effectuées par le compilateur JIT (telles que l'inlining) peuvent signifier que vous n'obtenez pas le bon numéro de ligne dans votre trace de pile. Si vous voulez être sûr du numéro de ligne, vous pouvez également définir la version de publication sur "aucune optimisation". Mais cela peut signifier que votre application a des performances et/ou un débit inférieurs (cette dernière a tendance à être plus importante dans une application Web). : Vous pouvez trouver le paramètre "Générer les symboles de débogage" en allant dans la fenêtre de l'Explorateur de solutions, en cliquant avec le bouton droit de la souris sur le projet et en choisissant l'élément de menu "Propriétés". Ensuite, allez dans Propriétés de configuration> Générer> Générer des informations de débogage et définissez la valeur sur true ou false. Le paramètre Optimiser le code se trouve dans la même fenêtre.

+0

Comment cela est-il fait? –

Questions connexes