在C ++中使用nan初始化内存以进行调试

bra*_*ain 5 c c++ linux debugging gdb

如何在启动时将ac或c ++程序中的所有内存初始化为NaN(非数字)以进行gdb调试?

我相信默认情况下,gdb会以零初始化,但这通常对于查找由于初始化错误而崩溃的代码没有帮助。

PS:我想将每个变量和数组初始化为NAN(或一些垃圾),仅用于调试。我正在使用的程序具有数千个变量,因此更改每个变量非常繁琐...

Not*_*ist 6

这些十六进制数字在Rafael的帖子中可能是正确的,但是我建议使用一种更语义的方式。

参见http://en.cppreference.com/w/cpp/types/numeric_limits/quiet_NaN

#include <limits>
double nan1 = std::numeric_limits<double>::quiet_NaN();
double nan2 = std::numeric_limits<double>::signaling_NaN();
Run Code Online (Sandbox Code Playgroud)

请注意,有两种NaN。


Raf*_*sta 4

您可以将浮点数转换为 32 位整数并将它们设置为之间的任何数字

0x7FC00000 and 0x7FFFFFFF or 
0xFFC00000 and 0xFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

对于双打转换为 u64 并将它们设置为之间的任何数字

0x7FF8000000000000 and 0x7FFFFFFFFFFFFFFF or 
0xFFF8000000000000 and 0xFFFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)