2010-11-29 8 views
3

私はSyslogのマルチスレッドC#サーバで作業しています。私は長時間実行している実験を実行しようとしていますが、1時間後にサーバーがハングアップすることがわかりました(特定の時間が経過するとログが停止します)。.NETアプリケーションがハングし、デバッグできません

私はそれをVisual StudioのモードDebugで実行しようとしましたが、スレッドがどこにあったかに関する有用な情報を得るために、ぶら下がって一時停止を押してみたところ、Visual Studioはリモートデバッグモニタがクラッシュしたと言いました。これはローカルアプリケーションです。

プロセスを一時停止してスレッドステータスに関する有用な情報を得るにはどうすればよいですか?

+1

プラットフォームのターゲットをx86に強制して、リモートデバッガを処理する必要はありません。 –

+0

残念ながら、結果はありません。私はWindows 7 x64を使用しています。 x64を強制する必要がありますか? –

答えて

0

WinDBGは、VSがトラップできない低レベルの問題の良い代替手段です。詳細はこちらDebugging Tools for Windows

3

Managed stack explorerは、管理対象アプリケーションをポーリングし、現在何が起こっているのかを記録します。

This articleでも役に立つかもしれませんが、クラッシュダンプファイルをデバッグする必要があります(WinDbgはVisual Studioと同じくらい吸収しにくいため、学習に時間がかかります)。

+0

+1クール。これを知らなかった – Aliostad

+0

Hmm ...試してみましたが、devenv.exeとdexplore.exeが表示されます(VS2008を実行している3つのインスタンス、1つはサーバーデバッグ、1はクライアントデバッグ、もう1つはアイドル状態です)。 –

+0

MSEを現在実行中のプロセス、デバッガは必要ありません。 – StingyJack

1

私はStingyJackの推奨を試してみましたが、Debug.WriteLine()を使用してLightweightトレースを置き換え、SysinternalのDebugViewを使用して何が起こっているかを確認することはできません。

がこれになります。 VSは、マルチスレッドサービスのデバッグに役立つほど強力ではありません。場合によってはオブジェクトの状態に陥っていて、のデバッグ時にをデバッグしているときは、は正常なイベントの流れを中断します

+0

私はVSでのデバッグが大好きですが、@Aliostadは正しいです - たとえ最適なシナリオであっても、デバッガをアタッチしたときのイベントの順序は、競合状態やその他本番環境で発生したバグは、デバッガでトラップしようとすると消えてしまうことがあります。 Debug.WriteLineはフェールセーフで、マルチスレッドアプリケーションをデバッグする唯一の信頼できる方法です。 – SqlRyan

+0

トレースを使用したランダムデッドロックのデバッグは非常に難しく、変更されたタイミングはデッドロック状態を解決する可能性があります。または、1時間待たずにすぐにトリガーしてください。もちろん、月がアクエリアスにあるときにのみ起こります。 –

+0

私はそれが管理されたデッドロックだったなら、私はそれを検出することができたと確信しています。これまで、私は常にそれらを検出することに成功しました。幸いにも、私はトラブルの潜在的な原因であるコンポーネントを分離した可能性があります –

関連する問題