2010-10-10 25 views
1

谁能告诉我下一个功能的代码,这引起了EXCEPTION_FLT_STACK_CHECK或EXCEPTION_BREAKPOINT,因为我能赶上他们在主FUNC:仿硬件异常的

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    __try 
    { 
     FaultingStack(); // What I need to write in this function??? 
    } 
    __except(GetExceptionCode() == EXCEPTION_FLT_STACK_CHECK ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) 
    { 
     return FALSE; 
    } 
    return TRUE; 

    return 0; 
} 

不建议的RaiseException FUNC,我需要的例子故障代码,而不是软件引发的异常

UPD:我需要一个异常EXCEPTION_INT_OVERFLOW

回答

2

断点异常容易引发多了一个代码段。您可以使用以下步骤之一(这是所有相同):

DebugBreak(); // API function 
__debugbreak(); // MSVC intrinsic 
__asm int 3; // Actual instruction 

现在,EXCEPTION_FLT_STACK_CHECK是关系到无效的浮点寄存器堆栈状态。

第一个应该使相关FP堆栈FP例外:

#include <float.h> 
_clearfp(); 
_controlfp(_controlfp(0, 0) & ~(EM_INVALID), MCW_EM); 

接下来,使FP堆栈溢出/下溢:

for (float f; ;) 
    __asm fstp f; 
1

假设MSVC,因为这是一个Windows的问题。您可以通过使用__debugbreak()内在函数来获得断点异常。测试时无需附加调试器。浮点堆栈检查错误要求取消掩盖FPU控制字中的溢出/溢出异常。并且,比如说,经常弹出堆栈。我滚他们都在一个示例程序:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    // STATUS_BREAKPOINT 
    __debugbreak(); 

    // STATUS_FLOAT_STACK_CHECK 
    _control87(_EM_UNDERFLOW | _EM_OVERFLOW, _MCW_EM); 
    double temp = 0; 
    __asm { 
     fstp [temp] 
     fstp [temp] 
    } 
    return 0; 
} 

`