2010-06-02 148 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的溝通,直到稍後階段解決問題。

儘管這不是一個適用於所有人的解決方案,但它對我來說很有效,而且我發現問題太模糊不清,以至於我不會給任何人評論和回答,因爲我發現沒有現成的在任何地方都可以發佈這個問題,所以在未來可能會有很好的參考。