Если вы устраняете проблему взаимоблокировки, первое, что вы должны сделать, это загрузить SOSEX.dll и попробовать команду !dlk
, поскольку она будет определять взаимоблокировки на основе Monitor
и ReaderWriteLock
,Он даже точно определит точное место в исходном коде.
В некоторых случаях команда !dlk
не определяет взаимоблокировки, как ожидалось.В этом случае вам нужно использовать !syncblock
в соответствии с вашим вопросом.Чтобы найти, какой поток пытается получить определенную блокировку, вы можете использовать ~*e!clrstack
, как указывает @Liran.Однако вы также можете использовать ~*e!dso
(который будет сбрасывать ссылки в стеке для разных потоков) и искать ссылки на объект блокировки.