PreApplicationStartMethodAttributeにアタッチされた初期化子を持つ ASP.NET MVC アプリケーションを作成しました。初期化すると、定義したインターフェイスを実装するコレクションがインスタンス化されます。このコレクションをインスタンス化すると、w3wp.exe がクラッシュし、イベント ログに次の 2 つの理解できないエントリが記録されます。
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 ビットです)。実行しようとすると次のようになります。
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
w3wp プロセスのプロセス ID が正しいことを 10 回再確認しました。IISState も x86 プロセスしかデバッグできないと思われます。アプリケーションの任意の場所にブレークポイントを設定しても、何も起こりません。ブラウザから IIS にリクエストが届くとすぐに、ブレーク ポイントに到達せず、w3wp がクラッシュします。Visual Studio 2010 で F5 キーを押してアプリケーションを起動するか、別のアプリケーションを起動して w3wp プロセスを起動して実行し、それに VS2010 デバッガーをアタッチして、障害のあるアプリケーションにアクセスしても解決しません。
また、 KB-911816で説明されているように HTTP モジュールを追加し、これをweb.config
ファイルに追加しようとしました。
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true" />
</runtime>
</configuration>
言うまでもなく、まったく違います。そのため、w3wp プロセスをデバッグする方法がなく、そこから情報を抽出して、イベント ログに完全にガベージ ダンプする方法がありません。この問題をデバッグする方法を知っている人がいたら、教えてください!