Re: Проблема с AccessViolation
От: kov_serg Россия  
Дата: 30.08.06 13:08
Оценка:
Здравствуйте, 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&amp;only=1
Автор: kov_serg
Дата: 29.08.06

Но оно мне самому не нравится
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.