Nya*_*uko 4 c++ multithreading windbg
我正在调试一个程序,我怀疑可能存在死锁或其他与线程相关的bug,我按照人们的建议使用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
Run Code Online (Sandbox Code Playgroud)
我对输出感到困惑,任何人都可以帮忙解释一下吗?
小智 10
!锁可能令人困惑.如果你真的想调试死锁的情况,做了〜*KVN(或KB无论你喜欢)找到线程都在等待这将在**WaitForSingleForSingleObject结束的关键部分,并在此之前,一个RtlEnterCriticalSection电话.找到大多数线程正在关注的关键部分.转储关键部分.如果您正在调试基于x64转储和缩小到使用.frame携带RtlCrticalSection帧/ C后你是在线程上下文〜[threadnum] S,RBX将包含您的关键部分.
转储关键部分找到所有者.如果主人正在等待找到所有者等待的东西等等,直到我们到达链的末端或事情被阻止的原因.!如果我们不将它放在上下文中,cs -l -o可能会令人困惑.
希望这可以帮助.
Teb 是线程环境块的地址,暂停和冻结目前不相关
\n\n假设它\xe2\x80\x99是一个32位场景,你可以通过以下方式揭示线程正在等待哪个关键部分:
\n\na) Switch to the thread\nb) dump stack\nc) Find 1 argument to RtlEnterCriticalSection\nRun Code Online (Sandbox Code Playgroud)\n\n(如果是 64,请按照上面 Addy 的接收)
\n\n
| 归档时间: |
|
| 查看次数: |
9577 次 |
| 最近记录: |