отключить Delphi исключения во время выполнения в Delphi - PullRequest
1 голос
/ 18 мая 2010

есть ли способ отключить показ сообщения об исключении во время выполнения в приложении Delphi? я думаю, что должна быть директива для отключения сообщения об исключении, но я не могу вспомнить его.

Ответы [ 3 ]

13 голосов
/ 18 мая 2010

Большинство сообщений об исключениях могут быть подавлены обработкой события TApplication.OnException. Объект приложения отображает сообщение об исключении только в том случае, если этому событию не назначен обработчик. Вы можете вызывать TApplication.ShowException в вашем обработчике для определенных исключений, если хотите.

Это событие вызывается для исключений, возникающих при выполнении в цикле сообщений VCL. Исключения, возникающие в другом месте, прерывают либо вашу программу, либо текущий поток. Кроме того, событие вызывается только для исключений, которые происходят от Exception; исключения, которые происходят от других классов, передаются непосредственно в SysUtils.ShowException.

Независимо от того, отображаете ли вы сообщение или нет, ваша программа все еще находится в неопределенном состоянии после возникновения исключения, которое вы не обработали. Простое подавление сообщения сродни уборке пыли под ковром. Лучше всего использовать средство регистрации исключений, такое как MadExcept , EurekaLog или JclDebug , которое записывает информацию об исключении и дает вашим клиентам возможность отправки отчетов обратно вам, чтобы вы могли воспроизвести условия ошибки и исправить ее.

3 голосов
/ 18 мая 2010

Я использую IDE, чтобы отключить его:

В Delphi 2007 нажмите Инструменты / Параметры и перейдите прямо к Параметры отладчика / Отладчики CodeGear / Исключения для собственных ОС. Выберите «Run Unhandled». Отладчик не будет останавливаться на исключениях, а будет действовать так же, как и запуск из exe. Исключения будут обрабатываться как таковые.

Что касается директив, я не знаю ни одной, которая могла бы точно выполнить вышеупомянутое, но, возможно, это поможет:

http://www.delphibasics.co.uk/ByType.asp?Type=Compiler%20Directive

1 голос
/ 18 мая 2010

Вы случайно не используете OpenGL? Я не пробовал это с более свежими сборками Codegear / OpenGL, но раньше была проблема, что OpenGL не отключал исключения FPU, но IDE ожидала, что они будут отключены по умолчанию (как библиотеки Microsoft), поэтому IDE сообщит об исключениях FPU ad-nauseam , несмотря на то, что они не имеют никакого значения.

Решением было явное включение исключений FPU, что можно сделать в коде с помощью оператора.

Set8087CW($133F);

Могут быть и другие библиотеки, где это тоже вызывает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...