Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертировать ли ошибки стд. библиотеки в свои? 
:(
    Опции темы
EvilsInterrupt
Дата 25.7.2012, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Хочется знать кто и как поступает с брошенными исключениями стандартной библиотекой  в коде своих библиотек?

Пока я делаю так:

Написан свой Fw::Exception и в каждой библиотеке есть свой главный тип исключения Lib1GeneralException, Lib2GeneralException,..., LibNGeneralException. Для того чтобы знать какая реально произошла ошибка от каждого главного типа исключения есть потомки к примеру Lib1SubExceptionType1, Lib1SubExceptionType2, ... Lib1SubExceptionTypeN.
Это очень похоже на Python-way, там есть юзер-дефайнед исключения.

Хочется знать как поступают другие? У кого какой опыт? Кто какое соглашение принял с самим собой или в компании?
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 25.7.2012, 20:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(EvilsInterrupt @  25.7.2012,  15:53 Найти цитируемый пост)
Хочется знать как поступают другие? 

свои исключения только тогда, когда предоставленые (стандартные и библиотечные) не справляются с задачей..


--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 26.7.2012, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



Цитата

свои исключения только тогда

Кидаешь только тип исключения к примеру throw super_excepiton() или же передаешь еще и текст ошибки throw super_excepiton('hz hz') ?
PM MAIL WWW ICQ Jabber   Вверх
bsa
Дата 26.7.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



EvilsInterrupt, в разных исключениях по разному. Разве это не логично?
PM   Вверх
EvilsInterrupt
Дата 31.7.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



bsa, Это не всегда логично. Во-первых: в разных проектах разные конвенции кодирования Во-вторых: В библиотечном коде не должно быть работы с каким-либо логером. Отсюда, если кидать исключительно тип, то нет возможности написать в пользовательском коде распечатку текста ошибки. Человек конечно может запомнить коды ошибок, но куда нагляднее все-таки тексты.

Вобщем, пока пришел к след. конвенции кодирования при написании библиотечного кода:

1) Библиотека сопровождается своей собственной иерархией типов исключений.
2) На вершине иерархии находится класс LibNameError , наследник от std::exception. Это дает пользователю узнать ответ на вопрос "А вообще ошибки были?" в тех случаях когда ему не важно знать детали, но хочется знать об ошибках
3) Интерфейс LibNameError обязан иметь методы code, text.
4) LibNameError обязан иметь перегруженные конструкторы для задания 1) только на основании кода ошибки 2) На основании текста и кода ошибки
5) От LibNameError  наследуются конкретные типы ошибок для тех случаев когда пользователь хочет знать конкретную причину поломки.

Оставшийся вопрос:

Что делать если перехваченное исключение не хочется терять, но при этом хочется сообщить пользователю и конкретной операции библиотечного кода во время которого возникло это исключение?
Не помню чтобы в С++ была возможность вкладывать одно исключение в другое, как это есть в Python
PM MAIL WWW ICQ Jabber   Вверх
kosmonaFFFt
Дата 31.7.2012, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Кидаю своего наследника от std::exception и boost::exception, всю нужную информацию (код, человекочитаемое сообщение и т. д.) кладу через boost::error_info механизм...


--------------------
user posted image
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 31.7.2012, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



kosmonaFFFt, Применяешь ли какой-либо инструмент для разворачивания стекдампа ?
PM MAIL WWW ICQ Jabber   Вверх
kosmonaFFFt
Дата 31.7.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Не нашел кроссплатформенных решений для этого, не применяю... Обычно хватает файла, строки и имени функции, чтобы понять что не так...


--------------------
user posted image
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 31.7.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



kosmonaFFFt, 
Цитата

Не нашел кроссплатформенных решений для этого

Может быть это: http://code.google.com/p/google-breakpad/ смотрел?
PM MAIL WWW ICQ Jabber   Вверх
boostcoder
Дата 31.7.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(EvilsInterrupt @  31.7.2012,  17:17 Найти цитируемый пост)
Может быть это: http://code.google.com/p/google-breakpad/ смотрел? 

оно вообще работает? проверял? на каких платформах проверял?

PM WWW   Вверх
kosmonaFFFt
Дата 31.7.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Я уже и не помню, смотрел это или нет... Точно помню, что из того, что смотрел, ничего не понравилось...


--------------------
user posted image
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 31.7.2012, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 2
Всего: 9



boostcoder, 
Цитата

оно вообще работает? проверял? на каких платформах проверял?

из:
http://code.google.com/p/google-breakpad/w...tedWithBreakpad
цитато:
Цитата

Breakpad is currently used by Google Chrome, Firefox, Google Picasa, Camino, Google Earth, and other projects.

PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 1.8.2012, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(EvilsInterrupt @  31.7.2012,  16:40 Найти цитируемый пост)
Что делать если перехваченное исключение не хочется терять, но при этом хочется сообщить пользователю и конкретной операции библиотечного кода во время которого возникло это исключение?

Перехватить исключение, в catch блоке напечатать, что надо, и бросить дальше (через throw без параметров)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.