Какие ошибки / исключения вызывают отчеты об ошибках Windows? - PullRequest
2 голосов
/ 07 октября 2009

При запуске приложения Delphi вне отладчика большинство возникающих исключений, по-видимому, игнорируется (например, нарушение доступа). Иногда, однако, появляется диалоговое окно сообщения об ошибках Windows (отправлять или не отправлять, вы, вероятно, знаете, что я имею в виду). Что именно это означает? Какие ошибки вызывают это поведение?

Дополнительная информация: у меня есть глобальный обработчик исключений для моего приложения, который должен регистрировать все необработанные исключения. Таким образом, никакие исключения не должны оставлять заявку необработанной.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 07 октября 2009

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

Если исключение ускользает от приложения, либо достигнув основного начала / конца без перехвата, либо не перехваченное циклом событий, система отчетов об ошибках Windows, функционально, является обработчиком исключений, как и любой другой. другие, кроме самого основания стека.

2 голосов
/ 07 октября 2009

Обычно у вас возникают проблемы, если у вас есть исключения в потоках, которые не обрабатываются в методе Execute. Программа в основном будет убита, но поведение непредсказуемо и, кажется, зависит от многих вещей (таких как количество и состояние других потоков). Часто главное окно сразу исчезает, и любые дальнейшие исключения, таким образом, не будут обрабатываться программой, и именно это, вероятно, заставляет WER их ловить.

У меня появилась привычка иметь внешний обработчик исключений в Execute, который регистрирует любые необработанные исключения и позволяет чисто завершать поток.

2 голосов
/ 07 октября 2009

Он охватывает исключения, которые не обрабатываются приложением - если исключение распространяется за пределы основной точки входа приложения, то вступает WER. Это охватывает такие вещи, как AV, деление на ноль, неверный доступ к дескриптору и другие выходы.исключений группы или "чипа".Иногда ваш код может пытаться справиться с этими вещами, но если память слишком сильно повреждена или что у вас есть, то ваш код умрет.

1 голос
/ 07 октября 2009

Исключения, возникающие в разделах инициализации и финализации, могут выйти из вашего глобального обработчика исключений и вызвать WER.

...