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
命令的情况下读取它,...)
更好的替代方法是!locks
使用!cs -s -l -o
see这将显示所有锁定的关键部分、所有者堆栈跟踪和关键部分堆栈跟踪,如果您想要所有关键部分,!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