有没有办法设置Visual Studio(刚刚从2008升级到2010年)来破解,就好像断言失败,只要任何浮点数变成NaN,QNAN,INF等?
到目前为止,我刚刚使用了断言(x == x)技巧,但我宁愿隐含一些东西,所以我不必在任何地方添加断言。
很惊讶我无法通过谷歌找到答案。关于'浮点异常'的一些东西,但我不确定它们是否是同一个东西,我已经尝试在Visual Studio中启用它们,但程序不会破坏,直到由于NaN后来发生灾难性事件执行中。
答案 0 :(得分:31)
1)转到项目选项并启用 / fp:strict (C / C ++ - >代码生成 - >浮动品脱模型)。
2)使用 _controlfp 设置浮点控制字(参见下面的代码)。
#include <float.h>
unsigned int fp_control_state = _controlfp(_EM_INEXACT, _MCW_EM);
#include <math.h>
int main () {
sqrtf(-1.0); // floating point exception
double x = 0.0;
double y = 1.0/x; // floating point exception
return 0;
}
答案 1 :(得分:4)
答案 2 :(得分:1)
至少在x86上,当您生成NaN等时,会设置其中一个FPU状态寄存器位。有一种方法可以设置,以便在下一次 FP操作发生时抛出H / W异常,但这并不是您希望的那么快。我不记得参考了。
答案 3 :(得分:0)
我不确定这是否可能以您希望的方式实现,但您可以创建一个宏,将标记行中的代码包装到断言中或为此设置断点。
希望这有帮助