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

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

Стандартная панель ошибки VC++ категорически не нужна - нужно взять стектрейс из экзепшена (Все экзепшены наследуются от одного корня, STL отучен от кидания std::* ), кинуть его в лог и умереть по тихому.
...
Рейтинг: 0 / 0
Исключение в процессе инициализации приложения.
    #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
Исключение в процессе инициализации приложения.
    #33117646
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне бы не хотелось обходить все ситуации, где может возникнуть исключение. Лучше было бы взять под контроль всю подсистему аварийного останова приложения. Изучение файла crt0.c пока ничего не дало.
...
Рейтинг: 0 / 0
Исключение в процессе инициализации приложения.
    #33117806
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?
...
Рейтинг: 0 / 0
Исключение в процессе инициализации приложения.
    #33117834
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman10Не проще ли вынести инициализацию из конструкторов в отдельный метод, который и вызывать из WinMain?

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

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


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