Как я могу отладить, в каком потоке объект заблокирован в процессе .NET Core в Linux? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть заблокированный процесс .NET Core, работающий в Linux.Я подключил lldb и вижу, что на Monitor.ReliableEnter застряли сотни потоков, и все они, похоже, пытаются заблокировать один и тот же объект, но я не могу понять, какой поток его удерживает.

Это тривиально в Windows с windbg с помощью команды !SyncBlk, но, насколько я могу судить, в Linux нет эквивалента.Блок синхронизации объекта содержит поток, в котором удерживается блокировка, и я могу найти индекс блока синхронизации для блокируемого объекта, но я не знаю, где находится таблица блоков синхронизации в памяти.

Какя могу выяснить, какой поток удерживает блокировку этого объекта?

1 Ответ

0 голосов
/ 07 ноября 2018

Ранее я не знал ни одного хорошего способа сделать это (кроме ручного удаления памяти с помощью собственного отладчика + исходного кода для Net Core).

Хорошая новость заключается в том, что мы только что слили PR ввосстановить функциональность! SyncBlk.https://github.com/dotnet/coreclr/pull/20830, поэтому я ожидаю, что SyncBlk вернется в следующей основной версии .Net Core.Вы также можете использовать ежедневную сборку от master, если не хотите ждать, со стандартным предупреждением, что в ежедневных сборках могут скрываться некоторые ошибки.

...