正常に動作するマルチスレッド アプリケーションをデバッグしようとしていますが、半ランダムに何もしなくなり、無期限にハングします。コール スタックを一時停止して確認しても、(GUI スレッド上に) 外部コードが表示されるだけなので、何も明らかになりません。
確かにデッドロックのような匂いがしますが、原因が何であるかを理解し始めることさえできません.
Visual Studio に組み込まれているパフォーマンス ツールを使用しようとしていますが、有用なデータが見つかりません。Concurrency Visualizer と Resource Contention ツールの両方を試しました。プログラムがハングした後、これらのツールは両方とも、GUI スレッドの通常のベースライン以外のどのスレッドでもアクティビティを示しません。スレッドが待機しているロックを確認する方法が見つかりません。
実際に役立つのは、特定の時点で、どのスレッドがどのロックを保持しているか、どのスレッドがどのロックを待機しているか、これらの呼び出しがコードのどこから来たかを確認できることです。
Visual Studio でこれを行う方法はありますか、そうでない場合は別のツールが役立ちますか?