c++ - 模拟硬件异常

标签 c++ c exception seh

谁能告诉我下一个函数的代码,它会引发 EXCEPTION_FLT_STACK_CHECK 或 EXCEPTION_BREAKPOINT,因为我可以在主函数中捕获它们:

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

最佳答案

很容易引发断点异常。您可以使用以下其中一项(都是一样的):

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;

关于c++ - 模拟硬件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900629/

相关文章:

c# - 当 IEnumerable 包含 null 时使用什么异常类

java - 从 Java 中的 toString 方法捕获异常

c++ - 为什么编译器允许这样做?

c++ - UDT::send 在 for 循环中只发送一次。没有错误

C:组合 while 和 if 语句

c - 为什么在macOS上用clang -O2编译C程序会出现 "empty"循环导致总线错误?

java - 尽管我可以通过 xpath 选择元素,但在 Firefox 中获取 ElementNotVisibleException 异常

c++ - 编译错误,提示 'std::basic_string<charT, _Traits, _Alloc>

c++ - 如何在valgrind中启动时修复 fatal error (与libc6-dbg和libc6-dbg:i386连接)

c - 在C中制作二维数组的最佳方法是什么