обработка SEH-исключения определенного типа (только нарушение прав доступа) - PullRequest
0 голосов
/ 20 марта 2019

Для обработки исключения нарушения доступа проект должен быть настроен с исключениями SEH (/ EHa).

Я ищу только обработку исключений нарушения прав доступа.Согласно этой публикации Microsoft здесь , чтобы поймать эти исключения SEH, нужно использовать общий улов catch(...), который поймает все исключения.

Вопрос заключается в том, есть ли возможность обработать это исключение по-отдельности и оставить другие SEH необработанными, необязательно с помощью шаблона try / catch.

ОБНОВЛЕНИЕ: благодаря ссылке в комментарии ниже, я узнал о структуре __try/__except для обработки исключений SEH со многими встроенными функциями, которые могут содержать некоторые дополнительные сведения о природе исключений.

В любом случае, я забочусь только об исключении AV, и я хочу избежать этого.Однако я использую C ++ и предпочитаю использовать стандартную структуру try/catch (при настройке параметра компилятора / EHa).

Есть ли возможность использовать эту встроенную функцию для проверки типа исключения в моем случае?

1 Ответ

0 голосов
/ 25 марта 2019

используя _set_se_translator Я могу определить требуемое поведение только в исключении SEH, оставив все не-seh исключения для оператора catch.

Я определил следующую обработку (должна быть установлена ​​для потока):

void mySEHtranslator(unsigned int exceptionCode, PEXCEPTION_POINTERS exceptionRecord)
{
    if (exceptionRecord->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
    {
        puts("access violation not count");
    }
    else
    {
        throw "1"; // does not suppose to be caught. 
    }
}

и в соответствующем разделе кода, где я хочу подразумевать переводчик, который игнорирует нарушение доступа:

void mycode()
{
    _set_seh_translator(mySEHtranslator);

    try {
        .... my code ...
    } 
    catch (...) // does not suppose to catch the "1" 
    {

    }
}

дополнительная ссылка здесь

...