Отладка истинного тупика на самом деле довольно проста, если у вас есть доступ к источнику и дамп памяти (или сеанс живой отладки).
Все, что вы делаете, это смотрите на потоки и находите те, которые ожидают на каком-то общем ресурсе (например, в режиме ожидания WaitForSingleObject
). Вообще говоря, нужно выяснить, какие два или более потоков заблокировали друг друга, а затем вам просто нужно выяснить, какой из них сломал иерархию блокировки.
Если вы не можете легко определить, какие потоки заблокированы, используйте метод, показанный в этом посте здесь , чтобы отследить цепочку блокировки для каждого потока. Когда вы попадаете в цикл, потоки в цикле блокируются.