質問

私の開発マシンで細かく動くが、他の2つのテストマシンでクラッシュするWindowsフォームアプリケーション(.NET 4)を持っています。私はそれがVS2010で作成したミニダンプをロードすることができます。

「混合したデバッグ」の選択は、明らかに無限のものにつながります(私は約20分後にDevenvを殺した)Visual StudioによってCPUの乱用。

ネイティブのみを「デバッグする」ときには、(テストマシンと同じフォルダにソースをミラー化したとしても)ソースが見つかりません。それは単に言う:

0x793F5B8Cの未処理例外 yourwinapp .exe.hdmp:0xc0000409:0xc0000409。

そして私を表示します

コールスタックの場所:CLR.DLL!793F5B8C()

アプリケーションがクラッシュする原因となっているものを見つけますか?「通知Microsoft」ダイアログが表示されている間、完全なcrashdumpを取りますか、そしてそれは役に立ちますか?

役に立ちましたか?

解決

MiniDumpデバッグは、VS2010では大幅に向上したと考えられました。まだ私自身の証拠をたくさん見ていません。私の言葉をそれに連れて行かないでください。ただし、ネイティブ専用管理コールスタックを表示するつもりはありません。

これをソースに取り付けます。 AppDomain.currentDomain.UnHandleDexceptionのイベントハンドラを書き込み、それをmain()メソッドに登録します。 e.exceptionObject.toString()の値を表示させてメッセージボックスに表示させます。それはあなたに例外の管理されたスタックトレースを取得します。そのメッセージボックスが表示されている間、ミニダンプをスナップさせることもでき、クラッシュの場所に近づくべきです。

あなたが取得している特定の例外は、絶対にネイティブのC / C ++コードを指すことです。スタックを破損しているバッファオーバーフロー。あなたのアプリが使用するネイティブコードのための.pdbファイルがあることを確認してください。 Microsoftシンボルサーバーを設定して、MiniDumpから良いネイティブスタックトレースを取得します。

編集:未処理のexceptionを受けないという事実は、CRTのスタック整合性チェックを確実に指しています。これはを上げるように設計されていましたが、すぐにプログラムを終了しました。必要な動作スタックが危険にさらされているため、コードは安全に巻き戻すことができると想定できません。クラッシュの場所を考えると、このチェックは実際にCLRコードで行われる可能性があります。これが以前のCLRバージョンでは行われていないことを知っていますが、.NET 4.0

に含まれているCLRバージョンでは異なる場合があります。

これは管理されたスタックトレースを取得することが非常に難しくなるでしょう。 CLRスタックフレームから識別子名を取得できるように、シンボルサーバーを設定する限り、管理されていないスタックトレースからリバースエンジニアリングできます。あなたがそれを解釈するのを助けたいならば、あなたの質問のトレースをあなたの質問に投稿してください。 CLRコードのバグがありそうもないBTWでは、Microsoftサポートを呼び出すことを検討することをお勧めします。しかし彼らは一貫したREPOを必要とするでしょう。 REPROがやってくるのが難しい場合、それらはそのすべての重要なスタックトレースとすることができます。シンボルサーバーを設定して、管理されていないスタックトレースを取得します。簡単なVS2010:ツール+オプション、デバッグ、記号、「Microsoftシンボルサーバー」をチェックします。

他のヒント

procdump アプリケーションが完全なメモリダンプを取得する未処理の例外があり、VSまたはWindBG

でデバッグすることができます。

とMiniDumpはワトソンバケットとしての呼び出しスタック情報を持っていますが、ここでは CLR チームと私は同じ

未処理例外のイベントビューアに表示されるワトソンバケット情報の簡単な説明

  1. exefilename
  2. EXEアセンブリバージョン
  3. EXEアセンブリのタイムスタンプ
  4. フルネーム
  5. フォールトアセンブリバージョン
  6. フォールトアセンブリのタイムスタンプ
  7. 故障アセンブリ法DEF
  8. 例外を引き起こした障害方法IL命令
  9. 例外タイプ
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top