Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключение в процессе инициализации приложения. / 7 сообщений из 7, страница 1 из 1
13.06.2005, 20:12
    #33114617
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
В общем, дело обстоит так. Есть приложение, в нем несколько статических синглтонов - подсистем.
Они загружаются в определенном порядке - сначала логер, потом конфиг, потом датабейс и шедюлер итд. Деинициализируются они в обратом порядке.

Проблема в том, что насколько я понял, всю функцию WinMain нельзя взять в try-catch. А мне надо отловить ситуацию с возможными экзепшенами, возникающими ДО входа в WinMain. Например, в конфиге ошибки или соединение с БД не установить итд.
Или после выхода из оной, когда синглтоны деинициализируются .

Стандартная панель ошибки VC++ категорически не нужна - нужно взять стектрейс из экзепшена (Все экзепшены наследуются от одного корня, STL отучен от кидания std::* ), кинуть его в лог и умереть по тихому.
...
Рейтинг: 0 / 0
13.06.2005, 21:05
    #33114635
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
Как вариант:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
template<typename T>
class singleton
{
     static T& instance_impl() 
     {
           static T tmp;
           return tmp; 
     }

public:

     static T& instance() 
     {
           try {
                return instance_impl();
           }
           catch(...)
           {
	   std::cerr << "can't create a object of " << typeid(T).name() << '\n';
                exit( 1 );
           }
     }
};

journal& the_journal = singleton<journal>::instance();
config& the_config = singleton<config>::instance();
database& the_database = singleton<database>::instance();
sheduler& the_sheduler = singleton<sheduler>::instance();

int main()
{
     return  0 ;
}

При любом выбрасывании исключения при инстанцировании у нас есть надежный guard singleton.
Удачи!
...
Рейтинг: 0 / 0
15.06.2005, 15:20
    #33117646
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
Мне бы не хотелось обходить все ситуации, где может возникнуть исключение. Лучше было бы взять под контроль всю подсистему аварийного останова приложения. Изучение файла crt0.c пока ничего не дало.
...
Рейтинг: 0 / 0
15.06.2005, 16:18
    #33117806
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?
...
Рейтинг: 0 / 0
15.06.2005, 16:30
    #33117834
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
roman10Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?

Ну, так человеку хочется показать свою крутизну и отдать дань моде
...
Рейтинг: 0 / 0
15.06.2005, 16:45
    #33117884
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
Землекоп roman10Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?

Ну, так человеку хочется показать свою крутизну и отдать дань моде
))))))))
чтобы обработать все исключалки до клика мышкой на ярлыке проги (на обработчике MouseMove)
)))))
...
Рейтинг: 0 / 0
15.06.2005, 17:26
    #33118007
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в процессе инициализации приложения.
roman10Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?
Я в общем то согласен, что более надежно было бы жить вообще без исключений и CRT Startup, и поставить в WinMain большой SEH - обработчик, который бы давил все исключения. Но код уже написан и находится в стадии полировки. Менять структуру на данном этапе нельзя.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключение в процессе инициализации приложения. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]