任何人都可以告诉我下一个函数的代码,它会引发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函数,我需要一个错误代码示例,而不是软件引发异常
UPD:我还需要一个代码片段用于下一个异常EXCEPTION_INT_OVERFLOW
答案 0 :(得分: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 :(得分: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;
}
`