Читаю о Structured Exception Handling в C. Ниже приведен пример кода, который не работает, как ожидалось:Exception Handler не вызывается в C
Этот код взят отсюда:
http://msdn.microsoft.com/en-us/library/ha52ak6a.aspx
// C4733.cpp
// compile with: /W1 /c
// processor: x86
#include "stdlib.h"
#include "stdio.h"
void my_handler()
{
printf("Hello from my_handler\n");
exit(1);
}
int main()
{
_asm {
push my_handler
mov eax, DWORD PTR fs:0
push eax
mov DWORD PTR fs:0, esp // C4733
}
*(int*)0 = 0;
}
Этот код должен печатать сообщение «Hello from my_handler», когда исключение запускается, пытаясь записать на неверный адрес памяти. Однако, похоже, обработчик исключений вообще не вызывается.
Я скомпилировал этот код и попытался отладить его с помощью Olly Debugger. Когда возникает исключение, я пытаюсь передать исключение в обработчик исключенных приложений (нажав Shift + F9), но он не вызван. Я установил точку останова в обработчике исключения (первая инструкция), но он никогда не доходит до этого раздела кода.
Что может быть причиной этого?
Похоже, что это предупреждение компилятора, а не проверка ошибок во время выполнения. У меня нет окон, поэтому я не могу проверить .. – texasbruce
Вы пытались скомпилировать свой код с параметрами компилятора '/ ZI/MTd'? Таким образом, у меня есть ожидаемый результат. – boleto