![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Хочется знать кто и как поступает с брошенными исключениями стандартной библиотекой в коде своих библиотек?
Пока я делаю так: Написан свой Fw::Exception и в каждой библиотеке есть свой главный тип исключения Lib1GeneralException, Lib2GeneralException,..., LibNGeneralException. Для того чтобы знать какая реально произошла ошибка от каждого главного типа исключения есть потомки к примеру Lib1SubExceptionType1, Lib1SubExceptionType2, ... Lib1SubExceptionTypeN. Это очень похоже на Python-way, там есть юзер-дефайнед исключения. Хочется знать как поступают другие? У кого какой опыт? Кто какое соглашение принял с самим собой или в компании? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
свои исключения только тогда, когда предоставленые (стандартные и библиотечные) не справляются с задачей.. |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Кидаешь только тип исключения к примеру throw super_excepiton() или же передаешь еще и текст ошибки throw super_excepiton('hz hz') ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
EvilsInterrupt, в разных исключениях по разному. Разве это не логично?
|
|||
|
||||
| EvilsInterrupt |
|
|||
|
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 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Кидаю своего наследника от std::exception и boost::exception, всю нужную информацию (код, человекочитаемое сообщение и т. д.) кладу через boost::error_info механизм...
-------------------- ![]() |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
kosmonaFFFt, Применяешь ли какой-либо инструмент для разворачивания стекдампа ?
|
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Не нашел кроссплатформенных решений для этого, не применяю... Обычно хватает файла, строки и имени функции, чтобы понять что не так...
-------------------- ![]() |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
kosmonaFFFt,
Может быть это: http://code.google.com/p/google-breakpad/ смотрел? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
оно вообще работает? проверял? на каких платформах проверял? |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Я уже и не помню, смотрел это или нет... Точно помню, что из того, что смотрел, ничего не понравилось...
-------------------- ![]() |
|||
|
||||
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
boostcoder,
из: http://code.google.com/p/google-breakpad/w...tedWithBreakpad цитато:
|
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Перехватить исключение, в catch блоке напечатать, что надо, и бросить дальше (через throw без параметров) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |