7

C# アプリケーションから APPCRASH が発生しています。ランタイムは、「このアプリケーションはランタイムに通常とは異なる方法で終了するよう要求しました」というエラー メッセージを表示します。次に、[OK] をクリックすると、通常の「オンラインで解決策を確認する」、「プログラムを閉じる」、「プログラムをデバッグする」オプションを含む「MyApplication が動作を停止しました」というメッセージが表示されます。「追加の詳細」をクリックすると、多くの追加情報を含む APPCRASH 署名が表示されます。人間が判読できるものもあれば、単なる 16 進数のものもあります。「例外コード」は 40000015 です。「追加情報」の行もあります。私の質問は、宇宙の誰かが APPCRASH メッセージの情報が何を意味するか知っていますか?

メッセージは、そこから原因を推測できる誰かが読むことを意図していたようです. 回答を探していると、まったく同じ形式のメッセージを投稿している人がたくさんいることがわかりました。残念ながら、この情報が何を意味するのかについての説明は見つかりませんでした。

また、「プログラムのデバッグ」オプションも試しましたが、役に立ちません。コールスタックのどこにもコードがなく、システムdllに入れられます。調べたところ、このシステムコードではエラーは発生しません。

APPCRASH メッセージは別の dll を「Fault Module」(このコードは多くの外部 dll を使用) として指定しており、致命的なエラーはおそらくそこで発生します。しかし、その情報はあまり役に立ちません。なぜなら、コード内で外部 dll に対して不正な呼び出しを行っている (または不正な状態にしている) 場所を見つける必要があるからです。悲しいことに、「私のコード」と言うときは、私が作業しているコードを意味しています。これは、数十人が数年かけて書いた巨大なコードベースなので、致命的な呼び出しを行う可能性のある場所を推測することはできません。だからこそ、私は APPCRASH メッセージからより多くの情報を推測することを望んでいました. それが、私が細部に非常にケチをつけている理由でもあります。全体が非常に独占的であり、多くの官僚的形式主義があります。APPCRASH メッセージの内容を掲載していないのもそのためです。

明確にするために、私の問題をデバッグするように頼んでいるわけではありません。エラーの再現可能なケースを提供する方法はありません。また、特定のケースでエラーの原因を教えてくれるように誰かに頼んでいるわけでもありません。これらの 16 進数の解釈方法を知りたいだけですが、ドキュメントを見つけることができませんでした。

4

4 に答える 4

12

アプリのクラッシュ メッセージの例を次に示します。

Problem signature:
Problem Event Name: APPCRASH
Application Name: WINWORD.EXE
Application Version: 12.0.4518.1014
Application Timestamp: 45428028
Fault Module Name: StackHash_7ae5
Fault Module Version: 6.0.6000.16386
Fault Module Timestamp: 4549bdc9
Exception Code: c0000374
Exception Offset: 000af1c9
OS Version: 6.0.6000.2.0.0.256.4
Locale ID: 1033
Additional Information 1: 7ae5
Additional Information 2: 4cf2e59e469447e0692da79a5a9446de
Additional Information 3: 333f
Additional Information 4: 583336399425ab3efc33bdfbb60895ee

アプリケーション名とアプリケーション バージョンは、タイムスタンプと同様に単純です (これはファイル エクスプローラーで変更された日付であり、32 ビットの Unix タイムスタンプ値としてエンコードされます)。通常、Fault Module は dll 名であり、例外オフセットは、エラーの原因となった DLL 内のハードウェア命令のオフセット アドレスです。この場合、有効なモジュールを取得できなかった内部実行時エラーであったため、実際の値ではなく StackHash を取得しました。バージョンは、Windows の実行可能ファイルの通常の PE バージョン文字列です。ロケール ID は、使用されているグローバリゼーション設定バンクです。1033 は en-US です。

例外コードはここで解釈できます。この例では、エラーは STATUS_HEAP_CORRUPTION でした。

追加情報フィールドは不透明なデータであり、例外コードに基づいています。これらのフィールドに関する有用な情報は知りません。おそらく何もありません。Microsoft が必要に応じて変更できるように、これらのフィールドは意図的に文書化されていない可能性があります。これらのフィールドは通常、多くの情報のmd5ハッシュです...基本的にそこにあるので、ハッシュコードを介して多くの情報をすばやく同じ/異なるものと比較できるため、エラーが別の実行状態と同じであるかどうかがわかります.

于 2014-08-11T20:50:11.767 に答える
1

これは、キャッチされていない未処理の例外があり、アプリケーションがクラッシュしていることを意味します。

デバッグ モードで動作している場合は、リリース バージョンとの違いを確認する必要があります。すべてのライブラリが存在しますか? app.config の設定はありますか?

詳細については、[Windows ログ] -> [アプリケーション] の下にあるイベント ビューアーを確認してください。

例外ハンドラーを設定すると、スタック トレースなどのより優れた情報が得られます。

于 2012-10-16T20:36:17.670 に答える
0

事後に分析できるクラッシュダンプを生成する必要があります。レジストリにいくつかの変更を加える必要があります。その後、Visual Studio を使用してダンプ ファイルを分析できます。失敗している特定の機能など、より多くの手がかりが得られることを願っています。

詳細については、この Web サイトを参照してください: http://blog.functionalfun.net/2013/05/how-to-debug-silent-crashes-in-net.html

Microsoft のツールである DebugDiag をセットアップします。

状況がどうなっているのか、またはより良いツールを見つけたら教えてください。

よろしく、

デイブ

于 2014-08-06T23:03:23.670 に答える