2

我试图弄清楚如何找到用 C 编写的模拟代码生成 NaN 的确切位置。我在 Debian 挤压上使用普通 C89(但我可以移至 C99/C11)和 gcc 4.4.5。

显然有一个valgrind 的补丁应该能够执行此检查。不幸的是,它不包含在 Debian 分发的二进制文件中。实际上,尝试编译 vanilla valgrind 加上 exp-floattrap 也不起作用(它似乎不包含在最终的可执行文件中)。

您是否继续在 C 源代码中查找此类错误的来源?

谢谢你的帮助。

4

1 回答 1

2

我承认我根本不使用 valgrind,只是因为我不需要它,但是如果您要寻找的只是单个变量设置为 NaN 的情况,您可以不只使用 GDB(或类似),并为变量设置一个观察点,例如:

watch var==NaN

这让你知道一个变量在什么时候变成 NaN,如果这不是有罪操作本身,而是一个返回值,你将自己移动到有罪链上的一个函数并在该函数中设置一个观察点,依此类推依此类推,直到您看到错误为止。

希望这会有帮助 :)

于 2012-07-26T18:20:10.020 回答