2012-06-13 2 views
4

Есть ли способ отключить все диалоговые окна при возникновении исключения или ошибки (например, нарушения доступа, ошибки сокета, тайм-ауты и т. Д.)? Они иногда возникают в моей программе, но эти ошибки никоим образом не являются фатальными и могут быть проигнорированы, только диалоговые окна тревожат. Я использую Delphi 7.Как отключить все исключения в Delphi?

+3

Вы можете поймать все исключения, но это совершенно неправильно, и написать такой код - это полное отсутствие профессионализма. Нарушение доступа всегда что-то не так и должно быть обработано. – LukLed

+10

Разве вам не кажется, что вам может быть лучше исправить ошибки в вашей программе? Предложение о том, что нарушения прав доступа можно просто игнорировать, совершенно странно. У вашей программы есть ошибки, и соответствующие действия - исправить их. –

+0

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

ответ

2

Обход события Application.OnException. Однако я бы не рекомендовал скрывать все исключения, ИМХО, что плохой дизайн.

5

Вы можете настроить событие Application.OnException. Но IMVHO ...

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

И:

  • нарушения доступа фатальные ошибки - вы должны отслеживать и избавиться от всех AV-х.
  • Вы не можете скрывать диалоговые окна исключений только с помощью Application.OnException override - вы должны использовать try finally/except в правильном направлении.
+0

«Вы не можете просто подбирать исключения под ковром, как это - вы должны использовать try finally/except in right way». Ну, правильный путь - не использовать 'try/except' ..... –

+3

@DavidHeffernan try/except полностью действителен, если вы использовали его правильно. Например. не для подметания под ковриком со всем покрытием try..except end ;, но с фактической обработкой различных исключений. – Harriv

+1

@DavidHeffernan: Вы имеете в виду try {...} кроме {обращение с любым возможным исключением} end или есть что-то не так с try {}, кроме E: ESpecificException do {обрабатывать только определенное исключение} end, о котором я не знаю? – g2mk

6

Если вы просто не привыкла показывать окно исключений затем перейти к:

Tools/Options/Debugger Options/Language Исключения и отключить CheckBox Уведомить об исключениях языка , Это недопустимо для Delphi 2010.

(Я не помню, если это тот же CheckBox в Delphi 7).

EDIT: В некоторых случаях исключения неизбежны, особенно когда мы работаем с неизвестными файлами из Интернета. Таким образом, я считаю, что ваши исключения обрабатываются должным образом под Инди, просто выключение Уведомлять об исключениях языка

+3

В Delphi 7 аналогичные инструменты -> Параметры отладчика -> Исключения языка -> Отключить «Остановить на исключениях Delphi» – Hendra

0

@ GJ - Delphi 2007 имеет тот флажок. Но опять же, как было упомянуто выше, нарушение прав доступа не является тем исключением, которое следует игнорировать.

Смежные вопросы