Реферат: Централизованная обработка исключений

{

defHandler = pVCExcRec->hander;

pVCExcRec->hander = handler;

break;

}

pVCExcRec = (_EXCEPTION_REGISTRATION *)(pVCExcRec->prev);

}

}

где

defHandler – статическая переменная, в которой сохраняется адрес предыдущего обработчика.

handler – наш обработчик исключения.

Разумеется, внимательный читатель уже заметил некоторую нелогичность в этих суждениях. Зачем пытаться зарегистрировать свой обработчик таким изощренным методом, если достаточно поместить свой блок __try __except в функции main? Дело в том, что при использовании MFC, ATL или какой-то иной библиотеки не имеется доступа к пользовательской точке входа, и, стало быть, нельзя установить свой обработчик.

Сейчас пришло время собрать воедино все сказанное выше и написать небольшую программу, иллюстрирующую способ установки обработчика. К статье прилагается файл ehSimple.cpp, в котором вы найдете код установки обработчика. Первый обработчик реализован в виде класса CatUnhandledExceptionFilter, объявленного следующим образом:

class CatUnhandledExceptionFilter

{

private:

// SEHHandler oldHandler – переменная, в которую будет записан адрес

//предыдущего обработчика исключения. Объявление типа SEHHandler

// былоприведеновыше.

static SEHHandler oldHandler;

static void zHookUpSEHChain(SEHHandler handler);

static int myHandler(PEXCEPTION_RECORD pEhRecors, PEXCEPTION_REGISTRATION pEhRegRecord, PCONTEXT pContext, void* pp);

public:

CatUnhandledExceptionFilter();

~CatUnhandledExceptionFilter();

};

static void zHookUpSEHChain(SEHHandler handler); – это функция для подмены обработчика исключений runtime-библиотеки. Код ее почти не отличается от предложенного ранее. Единственным изменением является переменная, в которой сохраняется адрес предыдущего обработчика.

static int myHandler(PEXCEPTION_RECORD pEhRecors, PEXCEPTION_REGISTRATION pEhRegRecord, PCONTEXT pContext, PEXCEPTION_RECORD pp); - это наш обработчик, который будет вызван в случае возникновения необработанного исключения.

int CatUnhandledExceptionFilter::myHandler(PEXCEPTION_RECORD pEhRecors,

К-во Просмотров: 278
Бесплатно скачать Реферат: Централизованная обработка исключений