使用 gcc/g++/gdb/valgrind 调试时的幻数?

Magic numbers when debugging with gcc/g++/gdb/valgrind?

如果程序员自己没有初始化,Microsoft 的 Visual C++ 会用 'magic numbers' 填充内存。这有助于调试未初始化的内存。 (In Visual Studio C++, what are the memory allocation representations?, 0xDEADBEEF vs. NULL)

使用linux GNU工具(g++/gdb)有没有类似的功能?

谢谢!

您可以覆盖 C++ operator new 以将分配设置为您首选的字节模式:

void* operator new(size_t size)
{
    void* mem = malloc(size);
    if (!mem) {
        throw std::bad_alloc();
    }
    memset(mem, 0xEE, size);
    return mem;
}

您可以在此处查看完整的 GCC 实现:https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/new_op.cc 如果您想更接近地镜像它。

这适用于任何使用默认 C++ 分配器的东西,但不适用于使用常规旧 malloc() 的东西。如果您需要直接从 malloc() 初始化内存,您也可以覆盖它,但实现它的机制不同:您可以使用链接器的 --wrap 选项来操作符号 table 和让你覆盖 malloc()。那么你当然不需要重载 operator new 。此处的答案说明了完整的方法: