то мало что можно сделать,
LONG IRet = EXCEPTION_CONTINUE_SEARCH;
// Если возбуждено исключение EXCEPTION_STACK_OVERFLOW (переполнение
// стека исключений), то мало что можно сделать, потому что стек
// переполнен. Если вы ничего не предпримете, то велики шансы, что // возникнет двойная ошибка и вы разрушите свой фильтр исключений.
// Хотя я не рекомендую это делать, но можно попробовать
// управлять регистром стека так, чтобы освободить
// достаточно места для выполнения этих функций. Конечно, если вы // изменили регистр стека, то возникнут проблемы с его прохождением.
//Я избрал безопасный путь и выполняю здесь несколько обращений //к OutputDebugString. Существует риск двойной ошибки, но
// благодаря тому, что OutputDebugString очень мало использует
// стек (примерно 8-16 байт), это — стоящий шаг.
// Ваши пользователи могут также загрузить программу
// DebugView/Enterprise Edition
// Марка Руссиновича (Mark Russinovich) с узла www.sysinternals.com.
// Единственная проблема
// состоит в том, что я не могу даже удостовериться, что
//в стеке достаточно места для преобразования указателя команд.
//К счастью, EXCEPTION_STACK_OVERFLOW не случается очень часто.
// Заметьте, что я еще вызываю ваш обработчик аварий.
// Кроме того, в случае если переполненный стек разрушает ваш
// обработчик аварий, здесь выполняется протоколирование.
if ( EXCEPTION_STACK_OVERFLOW ==
pExPtrs->ExceptionRecord->ExceptionCode)
{
OutputDebugString ( "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
OutputDebugString ( "EXCEPTION_STACK_OVERFLOW occurred\n"); OutputDebugString ( "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
}
_try
{
if ( NULL != g_pfnCallBack)
{
// Здесь должна быть инициализирована символьная машина,
// так чтобы можно было отыскать информацию базового модуля
// об адресе аварии, а заодно и привести символьную машину
Содержание Назад Вперед