在Visual Studio 2017调试器中查找NaN事件的根源

时间:2019-06-18 11:58:42

标签: c visual-studio visual-studio-2017

我想在我的C代码中找到NaN值的首次出现。我目前正在使用Visual Studio 2017调试器。

有没有简单的方法可以做到这一点? 我想象一个条件,该条件检查作用域中的所有变量,并且此时是否发生NaN中断。似乎没有这样的功能。有人接近吗?我也愿意接受其他调试解决方案(与Matlab C-Mex-Files一起运行)。

1 个答案:

答案 0 :(得分:0)

the link posted above中读取,似乎在Visual Studio中,每个解决方案最多可以有4个数据断点,而我认为它们的设置和维护非常麻烦。

根据您拥有多少个“实时”变量,一种替代方法是为NaN插入手动检查。要么编写一个可变参数函数,如:

bool isnan_any(int count, ...) {
    va_list argp;
    va_start(argp, count);
    while (count--) {
        double d = va_arg(argp, double);
        if (isnan(d)) {
            va_end(argp);
            return true;
        }
    }
    va_end(argp);
    return false;
}  

并传递您当前要检查的任何变量,或收集指向数组中所有double的指针,然后将其传递给isnan-check函数。