Я пытаюсь отладить тупик в моем процессе с помощью команды SOSEX! Dlk Получаю следующий результат:
*DEADLOCK DETECTED*
CLR thread 0xac holds the lock on SyncBlock 00000012ac132068 OBJ:00000012830d66a0[System.Object]
and is waiting for the lock on SyncBlock 00000012ae4ba6b8 OBJ:00000012808391f8[System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[CaptureServices.GenericInfrastructure.Controlling.CapManager.MO.CallRecorder.ICallRecorder, Capture Manager]]]
CLR thread 0x9a holds the lock on SyncBlock 00000012ae4ba6b8 OBJ:00000012808391f8[System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[CaptureServices.GenericInfrastructure.Controlling.CapManager.MO.CallRecorder.ICallRecorder, Capture Manager]]]
and is waiting for the lock on SyncBlock 00000012ac132068 OBJ:00000012830d66a0[System.Object]
Я хотел бы получить стек вызовов этих потоков, но я не могу найти идентификаторы потоков (0xac, 0x9a) в списках потоков. Я пробовал следующие команды, и указанные выше потоки не указаны ни в одном из результатов:
есть ли другой способ увидеть стек вызовов потоков, обнаруженных в тупике, который я мог пропустить? Я даже попытался преобразовать идентификатор потока в десятичный, но не смог найти соответствующий идентификатор потока.
Благодарность
спасибо - я нашел следующую статью, в которой объясняется, что идентификатор потока, показанный в результате, является идентификатором CLR в десятичной форме: blogs.msdn.microsoft.com/tess/2010/04/27/…
Хорошо. Тогда, пожалуйста, опубликуйте свой вывод в качестве ответа. Затем вы можете принять свой ответ и отметить это дело как решенное.
следующая статья помог мне читать результаты команды! dlk. согласно статье, если, например, мы обнаружили тупик в потоке 0xac:
CLR **thread 0xac** holds the lock on SyncBlock 00000012ac132068 OBJ:00000012830d66a0[System.Object]
Результаты команды! Thread содержат 3 столбца «ID»:
Идентификатор потока в! Dlk на самом деле является идентификатором CLR в результатах! Потока: (ac) = 172. Идентификатор CLR 172 - это поток 177.
0:000> !threads
Lock
ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception
177 172 1188 00000012abfcaee0 3029220 Preemptive 0000000000000000:0000000000000000 00000012f0e94d70 3 MTA (Threadpool Worker)
теперь я мог переключиться на поток 177 командой: ~ 177 с
и посмотреть стек вызовов потока командой: ! clrstack
!threads
показывает управляемые потоки. Может ты найдешь это там. Однако 9А - это 154, это большое число.