C# アプリのすべてのスレッドのスタック トレースを取得できますか? 質問する

C# アプリのすべてのスレッドのスタック トレースを取得できますか? 質問する

私は仕事でハッキングしている比較的大きなアプリで、明らかに同時実行の問題をデバッグしています。問題のバグは、パフォーマンスの低い特定のマシンで長時間 (12 時間以上) 実行した後にのみ現れ、デバッガーで再現したことはありません。このため、私のデバッグ ツールは基本的にログ ファイルの分析に限定されています。

C# を使用すると、例外をスローしたスレッドのスタック トレースを簡単に取得できますが、例外がスローされた時点で AppDomain で実行されていた他のすべてのスレッドのスタック トレースも取得したいと考えています。

これは可能ですか?

ベストアンサー1

CodePlexには、マネージド スタック エクスプローラー(これは Microsoft が開発したものだと私は思います)。これは、デバッグおよびプロファイリング API を使用して、実行中の .Net アプリケーション内のスレッドのスタック トレースをキャプチャします。アプリケーションを変更する必要はありません。

問題が発生するまでアプリケーションを実行し、このツールを使用して分析し、実行中のすべてのスレッドの現在のスタック トレースをキャプチャすることができます。このアプローチの利点は、アプリケーションを変更せずにそのままにしておくこと (インストルメント化によって動作が変わる可能性があります) と、ツールが無料であることです。

おすすめ記事