![]() |
|
![]() ![]() ![]() |
|
HappyLife |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Ужасная вещь - косяк в программе. Он может однажды испортить все настроение, и вызывает все больше и больше недоверия со стороны руководства (ни капельки не смыслящих в программировании). Мне важно, научиться вести лог моей программы, и не прерывать её выполнения из-за ошибок. То есть я хочу перехватывать все исключения, брать их на заметку и продолжить выполнение программы, без всяких фатальных выскакивающих окошечек (типо Access Violetion) и полного ЗАВИСАНИЯ ПРОГРАММЫ. Полагаю, что нужно перегрузить главную функцию программы которая ловит ВСЕ сообщения, поставить там блок try catch
Но вот, что это за функция, которая ловит сообщения всего процесса, (и всех прилежащих DLL). Спасибо за внимание. |
|||
|
||||
ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
а как try...catch может спасти от полного зависания в программе?
![]() -------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
HappyLife |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
У меня даже нет идей насчет системы личного тестирования моих приложений.
Например? Я же планирую сделать что-то нижеследующего кода
И вот это мне нужно реализовать на бильдере. Учитывая что уже давно есть полу-готовый проект. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Application->OnException |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
не буду напоминать, что просто продолжать выполнение после исключения, оставляя данные в неопределенном состоянии, - это зло.
но если уж встал на эту тропу, то советую воспользоваться какими-нибудь компонентами(ориентир) для облегчения поиска таких ошибок. в твоем случае надо просто сконфигурировать так, чтобы окно ошибки не показывалось, но в лог все писалось. Добавлено через 1 минуту
SetUnhandledExceptionFilter |
|||
|
||||
Vyacheslav |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Весьма спорное утверждение, если рассматривать ее не применительно к конкретной ситуации, а в общем. Кто сказал, что после генерации исключения данные окажутся в неопределенном состоянии? Или Вы предполагаете, что код пишется обязательно небезопасным? А как же идеи о создании безопасного кода? Насколько я помню, Дейвом Абрамсом было предложено три уровня безопасного кода: 1) Базовый - когда при генерации исключения код обеспечивает освобождение ресурсов и не допускает утечки памяти 2) Строгий - когда выполняются условия базового и состояние программы не изменяется 3) Без исключений - когда исключения либо вообще не генерятся, либо не выпускаются наружу В приниципе уже первые два позволяют построить программу так, что возможно нормальное продолжение работы программы даже после исключения. Последний - это весьма трудоемкий и маловероятный для реальной реализации вариант. Например, пользователь выполняет одну определенную бизнес-функцию. Во время выполнениния данной бизнес функции произошла ошибка, которая была зарегистрирована в лог. Если код программы обеспечил условие: состояние программы до начала и после неудачного завершения бизнес-функции осталось прежним, кто мешает повторить бизнес функцию с новыми условиями или вообще временно до устранения ошибки не выполнять эту бизнес-функцию, а работать с другими? Слава богу, разоаботчики VCL подумали о такой возможности.В билдере разработчики уже предоставили возможность отлавливать большую часть exception и продолжить работу. Это как правильно заметил тут xvr , использование Application->OnException. Остаются только проблема с теми exception, которые не являются производными от Exception. Их вероятное появление придется отлавливать в коде и вместо низ генерить Exception. Для этого достаточно подозрительные места обложить try catch. В реалиях это не так уж трудно. Например, у меня централизованная обработка ошибок выполнялась так
Как можно заметить, анормальный воход производится только в одном случае: когда ошибка произошла на этапе регистрации пользователя в системе. Во все остальных вариантах решение принимает пользователь. Я лишь гаранитрую, что при генерации ошибки пользователь лишь не сможет выполнить определенную бизнес-функцию. При этом испортить он ничего не сможет. Вот примерно такое окно. Если ошибка относится к БД, то появляется вторая вклака, по которой можно уточнить , где в БД произошала ошибка http://pic.ipicture.ru/uploads/080916/wAYWq7VZ5V.jpg Его код
Ну и еще некоторый код
Естесвенно, не вся информация об ошибках бывает доступна. Номер строки будет достпен только в том случае, если исключение сгенерировано Вами в коде с помощью throw, но и имеющейся информации бывает достаточно, чтобы быстро локализовать ошибку -------------------- С уважением, Вячеслав Ермолаев |
||||||||||||
|
|||||||||||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |