4

私は、サービスがランダムに例外をスローし、最終的にサイトでキャッチされ、そこでYSODを作成しているWCFサービスに支えられたASP.NETサイトで作業しています。これはバックエンドのスレッドの問題が原因であると思われ、問題を追跡したいと考えています。

WCF 側でキャッチされていない例外をキャッチし、実行中のすべてのスレッドのスタック トレースもキャプチャし、追加情報を使用して最初の例外を再スローする簡単な方法はありますか?

この複数のスレッド トレースは、フレームワークに付属するもの、または他の誰かが以前に考えたもののようですが、何も見つからないようです。

4

1 に答える 1

2

他のスレッドのスタック トレースをキャッチするには、例外がスローされたときにデバッガーでそれらのスタックを表示する必要があります (たとえば、Parallel Stack Window を使用)。

他のスレッドが到達できるスタック トレースを記録するためにコードをインストルメント化 (つまり、重要な場所に追加) することもできますが、これにはパフォーマンス、メンテナンス、およびエレガンスの問題が伴います。言うまでもなく、例外がスローされた後、他のスレッドは独立して進んだ可能性があるため、他のスレッドが行っていることを概算するだけです。

私が考えることができる他の唯一の方法 (これは推測です) は、何らかの方法で他のスレッドを中止し、中止をキャッチし、スタック トレースを保存してから、中止をリセットすることです。しかし、これはおそらく非決定論的な混乱になるでしょう。中止はお勧めできません。

おそらく、呼び出しプロファイラー、寛大なログ記録、および根本原因を見つけるために可能な限り範囲を絞り込むことをお勧めします。

于 2012-08-31T17:33:55.797 に答える