Во время отладки файлов дампа мне нужно регулярно проверять наличие блокировок, для которых я использую windbg
команда расширения !locks
, Когда все идет хорошо, это обеспечивает вывод, подобный следующему:
CritSec +54a8a8 at 0054a8a8
WaiterWoken No
LockCount 0
RecursionCount 1
OwningThread 13d8
EntryCount 0
ContentionCount 0
*** Locked
CritSec +b73a8d at 00135e8d
WaiterWoken No
LockCount 0
RecursionCount 1
OwningThread 55f3
EntryCount 0
ContentionCount 0
*** Locked
...
Scanned 662 critical sections
Иногда, однако, я получаю следующее сообщение об ошибке:
Stopped scanning because of problem reading critical section debug info
Scanned 7 critical sections
Можно ли в любом случае иметь какую-то информацию? (Например, где это critical section debug info
как я могу прочитать это без !locks
команда, …)
Лучшая альтернатива !locks
это использовать !cs -s -l -o
увидеть !cs
это отобразит все заблокированные критические секции, трассировку стека владельца и трассировку стека критической секции, вы можете пропустить -l
если вы хотите все критические разделы. Возможно, вам потребуется включить трассировку стека в пользовательском режиме, используя gflags
!gflag +ust
не забудьте удалить это, когда это не нужно !glag -ust
,
Чтобы отобразить информацию о критическом разделе, вы можете сделать это, если у вас есть адрес: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/displaying-a-critical-section
так !critsec ADDRESS
или используя команду типа дисплея dt
dt RTL_CRITICAL_SECTION ADDRESS
будет работать, если у вас есть адрес.
Других решений пока нет …