Есть ли способ отключить все диалоговые окна при возникновении исключения или ошибки (например, нарушения прав доступа, ошибки indy socket, тайм-ауты и т. д.)? В моей программе они иногда вылетают, но эти ошибки никак не фатальные и их можно игнорировать, только диалоговые окна мешают. Я использую Делфи 7.
Вопрос
Как отключить все исключения в Delphi?
- Можно отловить все исключения, но это совершенно неправильно, а писать такой код - полный непрофессионализм. Нарушение прав доступа всегда является чем-то неправильным и должно быть обработано. 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
Ответы
Ответ 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.
Похожие материалы
- Восстановление после исключения CommunicationObjectFaaledException в WCF
- Как я могу поймать сбой приложения или выйти в mshtml?
- Log4net: контекст журнала только для исключения
- Как определить HResult для System.IO.IOException?
- Selenium WebDriver для C# - всплывающие диалоговые окна
- Как запустить диалоговое окно wxPython без окна командной строки?