1

在生产中,我在 Global.asax 中处理了 Application_Error 事件,以记录(并通过电子邮件发送给我)任何潜入的未捕获异常的详细信息:

void Application_Error(object sender, EventArgs e) // code simplified a bit for SO
{
    Exception ex = Server.GetLastError();
    MyTools.LogError("Global.asax::Application_Error", "An unhandled exception occurred", ex);
}

然而,错误消息本身通常是无用的;有一个堆栈跟踪,但没有行号通常没有引用我自己的任何代码,只有 .net 框架(BCL)方法。有时至少会有关于页面名称的提示,但这已经是最好的了。

例子:

引发了“System.Web.HttpUnhandledException”类型的异常。

远程主机关闭了连接。错误代码为 0x80072746。

系统.Web

布尔句柄错误(System.Exception)

在 System.Web.UI.Page.HandleError(Exception e) 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System .Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 在 System.Web.UI.Page.ProcessRequest(HttpContext context) 在 ASP。aRealPageName_aspx .ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

那么知道如何让 global.asax 给我更多有用的错误信息吗?

我知道如果有办法告诉代码放在哪里,我可以在代码中添加一个 try-catch,但没有。

4

1 回答 1

1

如果您的生产服务器没有 pdb 文件,它不会给您行号。将您的 pdb 文件与 dll 一起复制以获取更多信息。

于 2012-10-03T04:36:51.000 回答