Здравствуйте, Sidorovich, Вы писали:
S>Есть серверное приложение написаное на C++ и работающее в среде Windows (Linux). Это приложение может подгружать различные модули для выполнения различных задач. А вот в этих модулях может произойти AV. И как только он происходит, то все это приложение валится в хлам. Хотелось бы как-то защититься от AV, который происходит в сторонних модулях и при таком событии их выгружать. Кто-то подскажет, как правильно перехватить оный AV?
Под windows в VC это решалось ключем компилятора /EHa и кодом вида:
#include <windows.h>
#include <eh.h>
struct MyException {
MyException(int code) : code {}
int code;
};
void trans_Exception( unsigned int u, EXCEPTION_POINTERS* exc) {
throw MyException(u);
}
int init_Exceptions() {
_set_se_translator(trans_Exception); // compile with: /EHa
return 1;
}
int auto_init = init_Exceptions();
После чего можно спокойно ливтить исключения.
В linux впринципе возникают сигналы, но преобразовать их в исключения не всегда удаётся.
Решение этой проблемы видел только в Tru64 Сompaq С++
спомощью exc_raise_signal_exception
http://www.camk.edu.pl/doc/ccc/Programmers_Guide/XCPTCHPX.HTM
Под обычным suse пока вот такое решение:
http://www.rsdn.ru/Forum/Message.aspx?mid=2082180&only=1Автор: kov_serg
Дата: 29.08.06
Но оно мне самому не нравится