0

C# で書かれたマルチスレッド プログラム (コンソール アプリケーション) があります。

6 ~ 10 時間後まで正常に実行され、失敗して停止し、コンソールが閉じず、最後の成功ログが表示されます

エラーログ (可能なすべて) をファイルに書き込みます。

IO例外が発生してもWindowsイベントに書き込む

プログラムを特定の制限に制限するメモリガードとスレッドガードもあります。

停止すると (6 ~ 10 時間後)、エラー ログ、ハート ビート、データベース呼び出し、メモリ使用量は何も起こりません。

データベース呼び出しの待ち時間が原因でスレッドが解放されない可能性があるため、メモリリークである可能性があることはわかっています。

この停止したアプリケーションで作業して、メモリリークがどこにあるのか、どの呼び出しがブロックされているのかなど、正確な問題を知りたかっただけです。

このハング/停止したアプリケーションで機能するツールはありますか? 続行する適切な方法は何ですか。

ANTS メモリ プロファイラー、パフォーマンス プロファイラーを使用しましたが、これらのツールはすべて実行中のアプリケーションで動作します。

私が得ることができるのは、メモリダンプです。

提案は大歓迎です。

編集:最初は、最後のオプションになる方法がない場合、デバッグするために何時間も待って再実行したくありません。

デバッガーをアタッチしてブレークポイントを配置しようとすると、「ブレークポイントは現在ヒットしません....」と表示されます

4

2 に答える 2

0

Debug Diagnostics Tool v1.2を試してみてください。必要なことを正確に実行し、さまざまな問題に対するわかりやすいウィザードを備えています。

このツールを使用したくない場合は、ハングしているプロセスにデバッガーを接続します。少なくともどのスレッドがまだ実行されているか、どのモジュールで実行されているかを確認できるはずです

于 2013-06-13T10:21:04.110 に答える
0

まず、イベント ビューアを見てください。次に、アプリケーションがログなしでクラッシュする場合は、未処理の例外が原因である可能性があります。次のコードを main メソッドに入れます。

Application.ThreadException += (sender, arg) => { log.Error("Unhandled exception : "+e.Exception);};
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

幸運を

于 2013-06-13T10:21:24.830 に答える