C++ 模拟硬件异常

C++ 模拟硬件异常,c++,c,exception,seh,C++,C,Exception,Seh,谁能告诉我下一个函数的代码,它会引发异常检查或异常断点,因为我可以在主函数中捕捉到它们: int _tmain(int argc, _TCHAR* argv[]) { __try { FaultingStack(); // What I need to write in this function??? } __except(GetExceptionCode() == EXCEPTION_FLT_STACK_CHECK ? EXCEPTION

谁能告诉我下一个函数的代码,它会引发异常检查或异常断点,因为我可以在主函数中捕捉到它们:

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:我还需要一个代码段来处理下一个异常异常异常\u INT\u溢出

断点异常很容易引发。您可以使用以下选项之一(完全相同):

现在,
EXCEPTION\u FLT\u STACK\u CHECK
与无效浮点寄存器堆栈状态有关

首先,应启用与FP堆栈相关的FP异常:

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

假设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;
}
`

for (float f; ; )
    __asm fstp f;
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;
}