2

ハングしたプロセスのダンプを取得したところ、このスレッドで待機しているスレッドが 3 つあります。

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

のクリティカル セクションを表示する方法はありますodbc32.dllか? 待機しているスレッドを知りたいです。

4

1 に答える 1

0

出力から、SleepConditionVariableCSkvに渡されたクリティカル セクション アドレスを確認できるはずです。次に、コマンドを使用して、現在誰かが所有しているかどうかを確認します。!critsec [address]

しかし、上記のスタック トレースによると、スレッドはまだ条件を待機しており、ロックの再取得をまだ試みていません。誰かが条件付きイベントを通知しなかった理由を見つけようとするのは簡単なことではありません。

odbc32!EnterCancelCSAndDbcCS のパラメーターとスタックを調べてみます。名前から、2 つのクリティカル セクションを使用しているように見えますが、そのうちの 1 つがロックされ、他のスレッドが状態を通知できないようになっている可能性があります。

于 2013-08-14T15:28:07.770 に答える