我正在从 global.asax 通过电子邮件发送未处理的异常详细信息。如何获取未处理异常的 aspx 文件或程序集文件的路径和/或文件名。
当我开发和测试时,此信息显示在异常的堆栈跟踪中。当我将 global.asax 部署到生产环境时,此信息不再显示在堆栈跟踪中。
当我在 Global.asax 中构建 MailMessage 对象时,有没有办法获取此信息?
谢谢
我正在从 global.asax 通过电子邮件发送未处理的异常详细信息。如何获取未处理异常的 aspx 文件或程序集文件的路径和/或文件名。
当我开发和测试时,此信息显示在异常的堆栈跟踪中。当我将 global.asax 部署到生产环境时,此信息不再显示在堆栈跟踪中。
当我在 Global.asax 中构建 MailMessage 对象时,有没有办法获取此信息?
谢谢
如果这是标签所暗示的 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");
}
在 Visual Studio 中,您需要设置发布版本以生成调试符号。与调试版本不同,默认情况下未设置。这将为您提供完整的异常堆栈跟踪。
即使这样,JIT 编译器完成的优化(例如内联)也可能意味着您在堆栈跟踪中没有得到正确的行号。如果您想确定行号,还可以将发布版本设置为“无优化”。但这可能意味着您的应用程序的性能和/或吞吐量较低(后者在 Web 应用程序中往往更为重要)。
编辑:您可以通过转到解决方案资源管理器窗口、右键单击项目并选择“属性”菜单项来找到“生成调试符号”设置。然后转到配置属性 > 构建 > 生成调试信息并设置为 true 或 false。优化代码设置在同一窗口中。