0

C# アプリ (Windows 7/VS2008) からランダムにクラッシュします。通常のスタック トレースは表示されませんが、Windows 7 の種類のダイアログ ボックスを閉じたり、デバッグしたり、情報を検索したりすることをお勧めします。私はVS2008の下から、またはスタンドアロンからアプリを実行しています-同じことです。[デバッグ] をクリックすると、VS の新しいインスタンスでデバッグすることが提案されますが、これは「別のデバッガーが既にアプリに接続されている」として失敗します。しかし、接続されたデバッガーは、出力ウィンドウ (以下) にいくつかの手がかりを与えるだけで、失敗した場所を確認する機会を与えてくれません。これに対処する方法は?

VS デバッガーで最初のチャンスの例外を有効にする (?) 必要があるようですが、その方法は不明でした。

追加 - VS2008 で例外のデバッグを有効にする方法を見つけました (デバッグ -> 例外 -> 例外の 5 つのカテゴリすべてをチェックしました)。それでも、まったく同じ結果が得られます-デバッガーで何が起こっているのかを確認できずにクラッシュします。

'PS.exe' (マネージド): ロードされた 'C:\Windows\assembly\GAC_MSIL\System.Deployment\2.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll' タイプ 'System.Deployment.Application.InvalidDeploymentException' の最初のチャンス例外System.Deployment.dll で発生しました 'System.Threading.ThreadAbortException' 型の初回例外例外が mscorlib.dll で発生しました スレッド 0x1964 はコード 0 (0x0) で終了しました。スレッド 0x1b24 はコード 0 (0x0) で終了しました。タイプ「System.ArgumentOutOfRangeException」の初回例外が mscorlib.dll で発生しました タイプ「System.ArgumentOutOfRangeException」の初回例外が mscorlib.dll で発生しました タイプ「System.ArgumentOutOfRangeException」の初回例外が mscorlib で発生しました。mscorlib.dll で発生しましたスレッド 0x19b8 はコード 0 (0x0) で終了しました。スレッド 0x18f4 はコード 0 (0x0) で終了しました。スレッド 0x420 はコード 0 (0x0) で終了しました。タイプ 'System.ArgumentOutOfRangeException' の最初の例外が mscorlib.dll で発生しました タイプ 'System.ArgumentOutOfRangeException' の最初の例外が mscorlib.dll で発生しましたタイプ 'System.ArgumentOutOfRangeException' のチャンス例外が mscorlib.dll で発生しました タイプ 'System.ArgumentOutOfRangeException' の最初のチャンス例外が mscorlib.dll で発生しました

4

5 に答える 5

3

それは、フォーミュラ 1 レースで大規模なパイルアップの 1 つを目撃するようなものです。静止した最後の破片は次のように報告しました。

// MessageText:
//
// A heap has been corrupted.
//
#define STATUS_HEAP_CORRUPTION           ((NTSTATUS)0xC0000374L)

はい、それは非常に深刻なタイヤのパンクです。ヒープが破損すると、多くのことがうまくいきません。おそらく、アンマネージ コードの典型的な方法で誤動作しているアンマネージ コードがあり、不適切なポインター書き込みでヒープの整合性が破壊されている可能性があります。診断が非常に難しく、そのコードを分離します。

于 2010-09-08T17:44:10.607 に答える
1

VS で、[デバッグ]/[例外] に移動し、[共通言語ランタイム例外] の [スロー] の下にあるチェック ボックスをオンにします。これにより、「最初の例外」がキャッチされます。

デプロイメントの例外は、Click Once に関連しているようです。使っていますか?

于 2010-09-08T17:34:57.677 に答える
0

CtrlVisual Studioで++を押すか、メニューから[デバッグ]> [例外Alt]Eを選択し、[CLR例外]をクリックして、すべてのファーストチャンス例外をキャッチします。うまくいけば、それは論争の時点で壊れるはずです。

それ以外の場合は、コードの重要なポイントで書き込みDebug.WriteTrace.Writeステートメントを試して、障害が発生する前に到達するポイントを確認してください。デバッグと書き込みの両方がSystem.Diagnostics名前空間にあります。

于 2010-09-08T17:36:18.643 に答える
0

開発ツールで失敗した場合は、出力ログ ファイルを作成するか、メッセージ ボックスを使用して追跡します。

于 2010-09-08T17:35:12.600 に答える
0

ヒープの破損をデバッグするのに最適な IMO は、Windbg を使用することです。これは、マネージド ヒープの破損のデバッグに関する Tessのブログ投稿です。

HTH

于 2010-09-08T18:48:00.960 に答える