Как отловить исключение из неизвестного места в DLL?
Доброго времени суток!
Ситуация следующая.
Есть центральная программа. Назовем ее Node.
В Node динамически подключаются несколько DLL (через LoadLibrary).
После подключения DLL, она начинает жить своей жизнью (запускаются отдельные потоки из самой DLL).
Проблема в том что нужно отловить из Node все исключения что могут возникнуть в DLL, чтобы принять меры.
Есть ли какой способ перехватывать все исключения что возникают в программе, даже если исключение возникло в неизвестном потоке?
sddvxd, подразумевается что Node работает 24 на 7.
А DLL может быть обновлено.
И при обновлении может возникнуть косяк.
А если возникнет косяк, поляжет Node.
Что не допустимо.
lightalex, не совсем вас понял. что узнавать, зачем. Я бы так сделал: одна dll с названием manager занималась бы включением вашей dll. если нужно обновить файл вашей dll - завершаем дерево потоков, убиваем сам поток с dll, меняем файл и снова manager запускает обновленную dll
lightalex, с чего вообще исключения должны возникать? я понимаю там что следы не почистила за собой dll, оставила дескрипторы открытыми или еще что-то. может я глуп, приведите мне пример 1 исключения
вы не правильно видимо понимаете момент возникновения исключения
throw runtime_error();
да вроде понимаю, его вы же и выкидываете. исключение не может из ничего появляться. Ваш вопрос звучит примерно так:
У меня есть DLL, которая в одном из своих потоков может вызвать исключение
- оно видимо само взяло и решило появится
ну оберните тогда весь код try, тогда уж точно ничего не проскочит. Раз вы говорите, что вам не выловить, внимание, ИСКЛЮЧЕНИЕ ИЗ СВОЕГО ЖЕ КОДА, то даже не знаю, что на это ответить
Я бы изолировал весь этот говнокод в отдельных процессах - дочерних по отношению к процессу основной программы. Т.е. на каждую библиотеку - запускается свой процесс, где работает а) эта библиотека и б) механизм обмена данными с процессом основной программы. Больше ничего.
Упал дочерний процесс с библиотекой - да и ладно.
Придется, конечно, сделать механизм межпроцессного взаимодействия. Но раз уж 24х7, можно и потрудиться. Зато потом можно спокойно жить.
К такому же решению пришел.
С++ как-то не особо позволяет управлять процессом краша...
Что довольно таки странно. Ведь C++ довольно низкоуровневый.
Спасибо за ответ :)