2010-06-02 150 views
1

我创建了一个ASP.NET MVC应用程序,其初始化程序连接到PreApplicationStartMethodAttribute。初始化时,集合被实例化,实现我定义的接口。当我实例化这个集合,w3wp.exe的崩溃,并在事件日志以下两个难以理解的条目:初始化集合时W3WP崩溃

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bd0eb 
Faulting module name: clr.dll, version: 4.0.30319.1, time stamp: 0x4ba21eeb 
Exception code: 0xc00000fd 
Fault offset: 0x0000000000001177 
Faulting process id: 0x1348 
Faulting application start time: 0x01cb0224882f4723 
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe 
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 
Report Id: c6a0941e-6e17-11df-864d-000acd16dcdb 

和:

Fault bucket , type 0 
Event Name: APPCRASH 
Response: Not available 
Cab Id: 0 

Problem signature: 
P1: w3wp.exe 
P2: 7.5.7600.16385 
P3: 4a5bd0eb 
P4: clr.dll 
P5: 4.0.30319.1 
P6: 4ba21eeb 
P7: c00000fd 
P8: 0000000000001177 
P9: 
P10: 

Attached files: 

These files may be available here: 


Analysis symbol: 
Rechecking for solution: 0 
Report Id: c6a0941e-6e17-11df-864d-000acd16dcdb 
Report Status: 0 

如果我删除了收集的实例,应用程序正常启动。如果我离开实例化,w3wp崩溃。如果我修改了界面,w3wp仍然崩溃。我已经尝试了每一个我能想到的保持实例化但其他方面都做了其他变化的变体,但w3wp仍然崩溃。

我最大的问题在于,我完全不知道为什么w3wp崩溃。这不是一个StackOverflowException或任何具体的事情,我得到的只是上面引用的非智能垃圾。

我试图使用DebugDiagIISState来调试w3wp进程,但DebugDiag仅适用于x64的后转储分析(我在Windows 7 x64上运行,所以w3wp进程因此是64位)和IISStat说以下,当我尝试运行它:

D:\Programs\iisstate>IISState.exe -p 9204 -d 
Symbol search path is: SRV*D:\Programs\iisstate\symbols*http://msdl.microsoft.com/download/symbols 

IISState is limited to processes associated with IIS. 
If you require a generic debugger, please use WinDBG or CDB. 
They are available for download from http://www.microsoft.com/ddk/debugging. 
This error may also occur if a debugger is already attached to the process 
being checked. 

Incorrect Process Attachment 

我仔细检查了10次,我的w3wp进程的进程ID是正确的。我怀疑IISState也只能调试x86进程。在应用程序的任何位置设置断点都没有任何作用。一旦请求从浏览器传递到IIS,中断点不会被击中,并且w3wp崩溃。在Visual Studio 2010中使用F5启动应用程序或启动另一个应用程序以启动并运行w3wp进程,然后将VS2010调试器附加到该应用程序,然后访问错误应用程序并没有帮助。

我也尝试作为以及它添加到我的web.config文件中KB-911816描述添加一个HTTP模块:

<configuration> 
    <runtime> 
    <legacyUnhandledExceptionPolicy enabled="true" /> 
    </runtime> 
</configuration> 

不用说,它使绝对没有什么区别。所以我没有办法调试w3wp进程,没办法从中提取任何信息,并完成在我的事件日志中转储垃圾。如果任何人有任何想法如何调试这个问题,请让我知道!

回答

1

我会回答我自己的问题只是为了得到结论,但我意识到它不是解决可能导致W3WP崩溃的各种问题的唯一解决方案。

我的集合初始化的基础是RouteTable.Routes,它可能会引发异常(可能是因为在ASP.NET生命周期的这种早期阶段尚未自行初始化)。推迟与RouteTable.Routes的沟通,直到稍后阶段解决问题。

尽管这不是一个适用于所有人的解决方案,但它对我来说很有效,而且我发现问题太模糊不清,以至于我不会给任何人评论和回答,因为我发现没有现成的在任何地方都可以发布这个问题,所以在未来可能会有很好的参考。