本番環境では、Application_Error イベントを Global.asax で処理して、こっそり通り抜けたキャッチされていない例外の詳細をログに記録 (およびメールで送信) しています。
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 です。
System.Web
Boolean HandleError(System.Exception)
System.Web.UI.Page.HandleError (例外 e) で System.Web.UI.Page.ProcessRequestMain (ブール値の includeStagesBeforeAsyncPoint、ブール値の includeStagesAfterAsyncPoint) で System.Web.UI.Page.ProcessRequest (ブール値の includeStagesBeforeAsyncPoint、ブール値の includeStagesAfterAsyncPoint) でASP での System.Web.UI.Page.ProcessRequest(HttpContext コンテキスト) での System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext コンテキスト) での .Web.UI.Page.ProcessRequest()。aRealPageName_aspx .ProcessRequest(HttpContext コンテキスト) で System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() で System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ、ブール値および completedSynchronously)
では、 global.asax を取得して、より有用なエラー情報を得るにはどうすればよいでしょうか?
どこに置くべきかを伝える方法があれば、コードに try-catch を入れることができることは知っていますが、そうではありません。