Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как отключить все исключения в Delphi?

Автор вопроса: user1262737Ответов: 4

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

  • Можно отловить все исключения, но это совершенно неправильно, а писать такой код - полный непрофессионализм. Нарушение прав доступа всегда является чем-то неправильным и должно быть обработано. LukLed 13.06.2012
  • Вам не приходит в голову, что вам лучше исправить ошибки в вашей программе? Предположение о том, что нарушения прав доступа можно просто игнорировать, совершенно нелепо. В вашей программе есть ошибки, и нужно их исправить. David Heffernan 13.06.2012
  • Вы правы насчет нарушений прав доступа, возможно, это было что-то еще (не помню, такое встречается очень редко). Я знаю, что в нем много ошибок, это что-то вроде пре-альфа-версии 0.1 бота, выполняющего некоторые повторяющиеся задачи, подобные краудсорсингу, много ошибок, но он уже выполняет свою работу. Я просто хотел временное решение, чтобы запустить его более безупречно, прежде чем я все оптимизирую. В любом случае спасибо за ответы. user1262737 14.06.2012
  • @user1262737 user1262737, пожалуйста, примите во внимание все, что написано выше и ниже (и комментарии, и ответы), иначе ваше приложение будет продолжать усложняться, и в какой-то момент его будет дешевле переписать, чем продолжать. 14.06.2012
  • Это напрашивается на неприятности, а вовсе не хорошая идея. 14.06.2012
  • Просто для резервного копирования всех остальных - исправьте ошибки! Это единственный путь к прогрессу. Эффективно используйте исключения - в моем текущем встроенном задании нет обработки исключений, и очень сложно найти критические ошибки. Martin James 14.06.2012

exceptiondialogdelphidelphi-7raise

Ответы

Ответ 1 · рейтинг 7 · GJ.

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

Инструменты/Параметры/Параметры отладчика/Исключения языка и отключите флажок Уведомлять об исключениях языка. Это справедливо для Delphi 2010.

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

РЕДАКТИРОВАТЬ: В некоторых случаях исключения неизбежны, особенно когда мы работаем с неизвестными файлами из Интернета. Итак, я считаю, что ваши исключения правильно обрабатываются в Indy, просто отключите Уведомлять об исключениях языка

Ответ 2 · рейтинг 5 · g2mk

Вы можете настроить событие Application.OnException. Но ИМХО...

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

А также:

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

Ответ 3 · рейтинг 2 · GDF

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

Ответ 4 · magarwal

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы