【发布时间】:2013-11-01 07:08:53
【问题描述】:
我正在阅读 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),但它没有被调用。我在异常处理程序(第一条指令)处设置了一个断点,但它从未到达那段代码。
这可能是什么原因?
【问题讨论】:
-
看起来这是一个编译器警告,而不是运行时错误检查。我没有窗户,所以无法检查..
-
您是否尝试过使用
/ZI /MTd编译器选项编译您的代码?这样,我得到了预期的结果。