我创建了一个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,wpoint就会崩溃并且w3wp崩溃。在Visual Studio 2010中使用F5启动应用程序或启动另一个应用程序以启动并运行w3wp进程,然后将VS2010调试器附加到它,然后访问错误的应用程序无济于事。
我还尝试按照KB-911816中的说明添加HTTP模块,并将其添加到我的web.config
文件中:
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true" />
</runtime>
</configuration>
毋庸置疑,它绝对没有区别。所以我无法调试w3wp进程,无法从中提取任何信息并完成在事件日志中转储的垃圾。如果有人对如何调试此问题有任何想法,请告诉我!
答案 0 :(得分:1)
我会回答我自己的问题只是为了关闭,虽然我意识到它不是可能导致W3WP崩溃的各种问题的唯一解决方案。
我的集合是基于RouteTable.Routes
初始化的,它可能抛出异常(可能是在ASP.NET生命周期的早期阶段尚未初始化)。将与RouteTable.Routes
的通信推迟到稍后阶段解决了问题。
虽然这不是一个适用于所有人的解决方案,但它对我有用,而且我发现问题是如此模糊,以至于我会让任何人评论和回答,因为我发现没有现有帖子在任何地方都可以解决这个问题,所以将来可能会有很好的参考。
答案 1 :(得分:0)
在Windows的最新调试工具中使用ADplus.exe来捕获崩溃转储。然后转储分析应该显示导致崩溃的原因,
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
版本6.12.2.633是必须的,因为它只包含adplus.exe的工作副本(请注意,不应使用adplus.vbs)。