我能看到odbc dll使用windbg等待的关键部分吗?

时间:2012-11-02 13:31:53

标签: deadlock windbg

我接受了一个挂起进程的转储,我有三个线程正在等待这个:

ntdll.dll ZwWaitForKeyedEvent
ntdll.dll RtlSleepConditionVariableCS
kernel32.dll SleepConditionVariableCS
odbc32.dll EnterCancelCSAndDbcCS
odbc32.dll FreeStmt
odbc32.dll SQLFreeStmt
oqpers.dll ZED_SQLFreeStmt

有没有办法查看odbc32.dll中的关键部分?我想知道它在等待什么线程。

1 个答案:

答案 0 :(得分:0)

kv输出中,您应该能够看到传递到SleepConditionVariableCS的关键部分地址。然后使用!critsec [address]命令查看当前是否有人拥有它。

但是根据上面的堆栈跟踪,线程仍在等待条件,并且还没有尝试重新获取锁。试图找出为什么有人没有发出条件事件的信号并不是一件容易的事。

我会讨论odbc32的参数和堆栈!EnterCancelCSAndDbcCS。从名称看起来它可能正在使用两个关键部分,其中一个可能被锁定,防止其他线程发出信号。

相关问题