Windbg“!locks”命令不起作用,我还能获取信息吗?

Dom*_*que 6 c++ debugging multithreading windbg locks

在调试转储文件时,我需要定期检查锁,为此我使用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
Run Code Online (Sandbox Code Playgroud)

但是,有时我会收到以下错误消息:

Stopped scanning because of problem reading critical section debug info

Scanned 7 critical sections
Run Code Online (Sandbox Code Playgroud)

是否可以提供一些信息?(例如,它在哪里critical section debug info,我如何在没有!locks命令的情况下读取它,...)

EdC*_*ica 4

更好的替代方法是!locks使用!cs -s -l -osee这将显示所有锁定的关键部分、所有者堆栈跟踪和关键部分堆栈跟踪,如果您想要所有关键部分,!cs可以省略。-l您可能需要使用gflags !gflag +ust“记住在不需要时将其删除”来启用用户模式堆栈跟踪!glag -ust

要显示关键部分信息,如果您有地址,则可以执行此操作: https: //learn.microsoft.com/en-us/windows-hardware/drivers/debugger/displaying-a-ritic-section

如果您有地址,那么!critsec ADDRESS或使用显示类型命令将起作用。dt dt RTL_CRITICAL_SECTION ADDRESS