1

过去几天我的应用程序的一部分遇到了一些严重的问题。它是一个中型 ASP.NET 应用程序。有一些处理错误的代码(将它们记录到数据库中并向用户显示错误页面)。但是最近这段代码在某些机器上停止了正常工作(不是在所有机器上)。

我知道有一个AccessViolationExceptionfrom 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 回答