私は何年も取り組んできた C++ アプリケーションを開発しています。最近、テスト ラボに 4 台のプロセッサ テスト マシンを追加しました。
それを行った後、負荷がかかっている特定のテストで断続的にLdrpLoaderLock
デッドロックが発生し、所有しているスレッドが実行されなくなることがわかりました。所有スレッド ID は通常、実行中のスレッドから外挿された可能性の高いスレッド ID であり、ロック メモリ構造が破損していないように見えるため、数値的に示唆的です。
デバッガーでこの問題は発生していません。それが起こった後、私はそれを見ることができます。作成しているすべてのスレッドのログを記録し始めましたが、そこに問題のスレッド ID が表示されません。ただし、デッドロックが発生した後にログが機能しない可能性があるため、意味がない場合があります。どのスレッドがこれを行っているかを把握できるように、スレッドの作成とエントリ ポイントを追跡する方法が必要だと思います。どんな助けでも大歓迎です。
ウィンドバックから
0:000> !ロック CritSec ntdll!LdrpLoaderLock+0 (775d20c0) ウェイター目覚めない ロックカウント 5 再帰回数 2 所有スレッド f38 エントリ数 0 競合数 5 *** ロックされています
スキャンされた 805 個のクリティカル セクション
0:000> !スレッド インデックス TID 0 00000ab8 1 000008cc 2 00000e68 3 0000134c 4 00000c44 5 000011a0 6 00000f18 7 00000908 8 00001084 9 00000f08 10 00001098 11 00001010 12 00000d40 13 0000135c
スレッド スタックによって消費される合計 VM 0x031cf000
0:000> 日 775d20c0 775d20c0 60 43 5d 77 ea ff ff ff-02 00 00 00 38 0f 00 00 `C]w........8... 775d20d0 ac 04 00 00 00 00 00 00-40 43 5d 77 ff ff ff ff ........@C]w.... 775d20e0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 02 ...... 775d20f0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...... 775d2100 00 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 .I]w............ 775d2110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...... 775d2120 20 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 I]w............ 775d2130 00 00 00 00 a0 0f 00 00-00 00 00 00 00 00 00 00 ......