Delphi: Зависание критического раздела отладки при сообщении стека вызовов запущенных потоков при сбое блокировки

Я ищу способ отладки редкого зависания критического раздела Delphi 7 (TCriticalSection) / тупик. В этом случае, если поток ожидает в критическом разделе более 10 секунд, я хотел бы создать отчет с трассировкой стека как потока, который в настоящее время блокирует критический раздел, так и потока, который не смог чтобы заблокировать критическую секцию после ожидания 10 секунд. Это нормально, если возникает исключение или приложение завершает работу.

Я бы предпочел продолжать использовать критические секции, а не использовать другие примитивы синхронизации, если это возможно, но может переключаться при необходимости (например, для получения функции тайм-аута).

Если инструмент / метод работает во время выполнения вне среды IDE, это является плюсом, так как это трудно воспроизвести по запросу. В редком случае я могу продублировать тупик внутри IDE, если я попытаюсь поставить на паузу, чтобы начать отладку, IDE просто сидит там, ничего не делая, и никогда не переходит в состояние, когда я могу просматривать потоки или стеки вызовов. Тем не менее, я могу сбросить текущую программу.

Обновление: в этом случае я имею дело только с одним критическим разделом и двумя потоками, так что это, скорее всего, не проблема упорядочивания блокировок. Я считаю, что существует неправильная вложенная попытка входа в блокировку в двух разных потоках, что приводит к тупиковой ситуации.

8
задан Anagoge 15 September 2010 в 20:21
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: