我创建了一个 ASP.NET MVC 应用程序,它有一个附加到PreApplicationStartMethodAttribute的初始化程序。初始化时,将实例化一个集合,该集合实现了我定义的接口。当我实例化此集合时,w3wp.exe 崩溃,事件日志中出现以下两个难以理解的条目:
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 或任何类似的具体东西,我得到的只是上面引用的不智能的垃圾。
我尝试使用DebugDiag和IISState来调试 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 调试器附加到它,然后访问出现故障的应用程序没有帮助。
我还尝试按照KB-911816中的说明添加 HTTP 模块,并将其添加到我的web.config
文件中:
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true" />
</runtime>
</configuration>
不用说,这完全没有区别。所以我无法调试 w3wp 进程,无法从中提取任何信息并完成垃圾转储到我的事件日志中。如果有人对如何调试此问题有任何想法,请告诉我!