1

アプリケーションの一部で、ここ数日深刻な問題が発生しています。中規模のASP.NETアプリケーションです。エラーを処理するコードがいくつかあります(データベースにログインし、エラーページをユーザーに表示します)。しかし最近、このコードは一部のマシン(すべてではない)で正しく機能しなくなりました。

私はAccessViolationExceptionからがあることを知っていErrorViewerます:

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e21213c
Exception code: 0xc0000005
Fault offset: 0x000000000000cacd
Faulting process id: 0x1150
Faulting application start time: 0x01cd1e44675765e2
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: c43403ad-8a37-11e1-b256-005056891270

このエラーは、アプリケーションがエラーページを表示しようとするたびにエラービューアに記録されます。ただし、エラーはmsiインストーラーを使用してデプロイされたアプリケーションでのみ発生し、dllファイルは暗号化されているため、このアプリケーションをデバッグできません。コードを少し変更して、初期メソッドを単純なワンライナーにリファクタリングしました。

Public Shared Function HandleException(ByVal exception As System.Exception) As Guid
    Return New GUID
End Function

しかし、それでもこのメソッドを入力すると、このスタックトレースで例外がスローされました(DebugDiag 1.2を使用して取得)

at (Exception ) 
at MyApp.Business.Utilities.HandleException(Exception exception) 
at () 
at MyApp.BaseUtilities.ErrorSolution() 
at (ErrorPage_errorpage , Object , EventArgs ) 
at MyApp.ErrorPage_errorpage.Page_Load(Object , EventArgs ) 
at System.EventHandler.Invoke(Object sender, EventArgs e) 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
at System.Web.UI.Page.ProcessRequest() 
at System.Web.UI.Page.ProcessRequest(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error) 
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) 
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 

それは私には奇妙に思えました。次に、このメソッド呼び出しを削除すると、突然アプリケーションが正しく機能し始めました(ただし、必要に応じてエラーを処理できませんでした)。重要なのは、まったく同じコードが何年も機能し、少し変更されておらず、一部のマシンでは機能しなくなったということです。
さらに興味深いのは、単純なGUIDを返すだけの、上記で説明した単純なメソッドを呼び出すと、どのようにスローされるのAccessViolationでしょうか。

誰かが彼らのアプリケーションで同様の問題を抱えていましたか?なぜこのようなことが起こっているのか誰かが私に説明できますか?

4

1 に答える 1

1

エラーは不思議なことに現れ、コードを少し変更した後も不思議に消えました(コードが何をどのように実行していたかは少しも変わりませんでした)。私が彼らに問題を示した私のチームや他の開発者の誰も、彼らが見たものを信じることができませんでした。

宇宙にはまだ少し魔法があるようです...

于 2012-07-17T18:53:23.893 に答える