【发布时间】:2014-10-26 13:00:29
【问题描述】:
我正在调试一个我怀疑可能存在死锁或其他多线程相关错误的程序,我按照人们的建议使用 WinDBG 打开故障转储文件并使用 !locks 获得以下输出:
CritSec MSVCR100D!lclcritsects+48 at 73541e40
WaiterWoken No
LockCount 6
RecursionCount 1
OwningThread 164c
EntryCount 0
ContentionCount 9
*** Locked
*** ERROR: Symbol file could not be found. Defaulted to export symbols for qsqlited4.dll -
CritSec qsqlited4!qt_plugin_instance+a1b21 at 70fc301c
WaiterWoken No
LockCount 0
RecursionCount 1
OwningThread 2344
EntryCount 0
ContentionCount 0
*** Locked
CritSec +73c2380 at 073c2380
WaiterWoken No
LockCount 0
RecursionCount 4
OwningThread 2344
EntryCount 0
ContentionCount 0
*** Locked
CritSec +73bf9e8 at 073bf9e8
WaiterWoken No
LockCount 0
RecursionCount 1
OwningThread 2344
EntryCount 0
ContentionCount 0
*** Locked
Scanned 817 critical sections
我对输出感到困惑,谁能帮忙解释一下?
【问题讨论】:
-
谢谢,但是每个部分后面的 *** Locked 是什么意思? MS的页面中没有解释。
-
这意味着
CRITICAL_SECTION当前被锁定:)。您可以随时尝试转储您知道 未 锁定的CRITICAL_SECTION。我希望输出会有所不同 -
!cs -l 将列出相同的内容,但输出可能更好。 !cs -l -o 是我最喜欢的,它还显示了拥有线程的堆栈。
标签: c++ multithreading windbg