1

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 やそのような具体的なものではありません。私が得るのは、上記のインテリジェントでないジャンクだけです。

DebugDiagIISStateを使用して 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 プロセスをデバッグする方法がなく、そこから情報を抽出して、イベント ログに完全にガベージ ダンプする方法がありません。この問題をデバッグする方法を知っている人がいたら、教えてください!

4

2 に答える 2

1

W3WP のクラッシュの原因となっている可能性のあるさまざまな問題に対する唯一の解決策ではないことはわかっていますが、結論を出すためだけに自分の質問に答えます。

私のコレクションは、例外をスローした可能性があることに基づいて初期化さRouteTable.Routesれました (おそらく、ASP.NET ライフサイクルの初期段階でまだ初期化されていないため)。との通信をRouteTable.Routes後の段階まで延期すると、問題は解決しました。

これは誰にとってもうまくいく解決策ではありませんが、私にとってはうまくいきました。この問題に関する既存の投稿が見つからなかったため、問題が非常に曖昧であるため、誰かがコメントして回答できるように残しますどこにでもあるので、今後の参考になるかもしれません。

于 2011-05-09T10:51:15.197 に答える
0

Windows 用の最新のデバッグ ツールで ADplus.exe を利用して、クラッシュ ダンプをキャプチャします。次に、ダンプ分析により、クラッシュの原因が示されるはずです。

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

http://www.microsoft.com/downloads/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en

バージョン 6.12.2.633 は、adplus.exe の作業用コピーのみが含まれているため必須です (adplus.vbs は使用しないでください)。

于 2010-06-05T12:38:22.577 に答える