2012-04-19 5 views
1

지난 며칠 동안 응용 프로그램의 일부로 심각한 문제가 발생합니다. 그것은 중간 규모의 ASP.NET 응용 프로그램입니다. 오류를 처리하는 일부 코드가 있습니다 (데이터베이스에 기록하고 오류 페이지를 사용자에게 표시합니다). 그러나 최근에이 코드는 일부 컴퓨터에서는 제대로 작동하지 않았습니다.방법으로 갈 때 액세스 위반 예외가 발생했습니다.

나는 ErrorViewer에서 AccessViolationException가 알고

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) 

을 throwed . 그런 다음이 메서드 호출을 제거하고 갑자기 응용 프로그램이 올바르게 작동하기 시작했으나 오류는 처리하지 않았습니다. 문제는 정확히 몇 년 동안 똑같은 코드가 작동했는지, 약간 변경되지 않았으며 일부 컴퓨터에서 작업을 중단 한 것입니다.
더욱 흥미로운 점은 위에 설명 된 단순한 GUID를 반환하는 간단한 메서드로 호출하면 AccessViolation을 던질 수 있다는 것입니다.

누구나 응용 프로그램에서 비슷한 문제가 있었습니까? 누군가 이런 일이 왜 일어나는지 설명 할 수 있을까요?

+0

예외가 발생하면 어떤 종류의 로그를 쓰려고합니까? 그렇다면 로그 폴더에 windows 권한이있는 문제 일 수 있습니다. – Habib

+0

아니요, 아니에요, 확인했습니다. 설명에서 언급 한 것처럼 : 메서드가 아무 것도하지 않고 새로운 GUID를 반환하는 경우에도 예외가 throw됩니다. 아무것도 더. – Pako

+0

WebPages v1.0을 수동으로 "C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Pages \ v1.0의 해당 폴더에 복사하여"설치하려고 시도한 후에도 동일한 예외가 발생했습니다. GAC에 삽입). 내 프로젝트는 단순히 IIS의 모든 버전을 충돌시키기 시작했습니다. 분명히이 설치 프로그램을 설치하는 설치 프로그램이 없기 때문에 제가했습니다. :( – user2173353

답변

1

오류가 신비하게 나타 났으며 코드가 약간 변경된 후에도 오류가 사라졌습니다. 코드가 변경된 내용과 코드가 변경되지 않았습니다. 팀원이나 다른 개발자에게 내가 문제를 보여준 사람은 본 내용을 믿을 수 없습니다.

우주에서 여전히 약간의 마법이있는 것처럼 보입니다 ...

관련 문제