![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
Пишу библиотеку - оболочку над dll файлом который работает с некоторым девайсом. Проблема заключается в том что я не знаю что именно нужно делать при критической ошибке и что при не критической.
Например в dll не содержатся все функции, т.е. присутствуют только самые нужные, при обнаружении таких ошибок я писал в лог, что сейчас делать не знаю. При вызове метода, ему передается список значений в vector'е, некоторые значения недопустимы, как сказать пользователю? При критических ошибках (dll файл отсутсвует) какие именно исключения выкидывать чтоб передать текст? |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Не совсем понятно критичность относительно чего?
Я всегда делю критичность на: * Критичность для стабильной работы системы в целом, ибо могут упасть другие проги * Критичность по выполнению бизнес-задачи, к примеру при программе решающей квадр. уровнение дискриминант равен нулю, дальше решать нет смысла! * Критичность по времени выполнения, пользователь живет не вечно и хочет знать насколько быстро его задача будет завершена. |
|||
|
||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
EvilsInterrupt, имелось ввиду критичность по отношению дальнейшей стабильной работы программы: нет нужного файла - программа не будет работать (критично, можно выбросить исключение), какой-то параметр из файла конфигурации неправильный - подставляем значение по умолчанию и идем дальше (нужно записать в лог, как это сделать если библиотека не знает о нем?)
|
|||
|
||||
KaZepKa |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 29.10.2011 Репутация: нет Всего: нет |
||||
|
||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
||||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
asmdzen,
Лично я для себя принял решение такое: Если в случае разработки библиотечного кода выполнение бизнес-задачи библиотекой не возможно, то пишу log.debug_message() это отладочный лог предназначенный для разработчика и кидаю исключение. Выбрасывание исключения не дает проигнорировать проблему тому программисту кто использует библиотеку. Все таки надо отталкиваться от факта, что библиотека видит проблему, но не знает, что делать. А вот клиентский код не обязан определять траблы, но он лучше осведомлен о причинах. О том что считать критичным, что нет, очень неплохо аргументировал Страуструп в своей последней книге. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Можно сделать callback'и в самой библиотеке, которые она будет вызывать при критических и не критических ошибках. По умолчанию они будут реализованны в самой библиотеку и будут писать в лог файл, но пользователь библиотеки может подставить свои callback'и
|
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Я бы не стал такое делать в юзермодном, пусть даже системном коде. Такое решение больше подходит для уровня ядра. Дело в том что клиент, т.е. программист пишущий код использующий библиотеку может не установить колбаков и как вывод при критичной проблеме приложение не отреагирует должным образом. В случае бросания исключения это вынудит клиент посмотреть проблему и написать код обрабатывающий ее! Но есть нюансы ;) Автору темы рекомендую почитать обработка исключений Это сообщение отредактировал(а) EvilsInterrupt - 20.4.2012, 15:07 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Обработчик по умолчанию должен терминировать приложение (с записью в лог). 'Не отреагировать' на это будет довольно затруднительно ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |