Команда дает вам критический раздел и поток-владелец, который 277c
.
Теперь вам нужно выяснить, что этот поток делает.Начните с ~~[277c]s
и посмотрите на стек вызовов.Он может просто находиться в бесконечном цикле, но также может быть в вызове WaitForSingleObject()
или WaitForMultipleObjects()
.
Получить параметры, переданные в качестве аргументов любой из функций Wait...()
, и посмотреть, что это за потокждетМожет быть еще один критический раздел, но может быть другой объект синхронизации.Попробуйте выяснить, кто является владельцем этой вещи.
Продолжайте так до тех пор, пока не вернетесь к теме 277c
и не подтвердите цепочку тупиков.
Этот ручной подход может быть очень утомительным.Возможно, вы захотите попробовать автоматизированный анализ:
!analyze -hang
может дать полезную информацию !sosex.dlk
может анализировать взаимоблокировки только между критическими секциями, но полностью (вы получаете всю информациюнеобходимо) - использовать отладить анализ зависания Diag