Gdb C调试器是否将所有进程内存初始化为0?

Gdb C调试器是否将所有进程内存初始化为0?,gdb,Gdb,我最近遇到了一个间歇性的未初始化指针问题,它导致了SEG故障。我尝试使用gdb和vscode的内置调试器(cppdbg)调试它,但无法复制它,只有在正常运行可执行文件时才出现问题。如果指针不为null,相关代码会释放一个指针,并且1/10运行时它恰好为非null,因为它从未初始化过。我重新运行了调试程序将近一百次,所以我有点好奇为什么调试时从来没有发生过SEGFULT gdb/etc是否在启动进程之前将进程内存初始化为0 gdb/etc是否在启动进程之前将进程内存初始化为0 没有 根据具体的细节

我最近遇到了一个间歇性的未初始化指针问题,它导致了SEG故障。我尝试使用gdb和vscode的内置调试器(cppdbg)调试它,但无法复制它,只有在正常运行可执行文件时才出现问题。如果指针不为null,相关代码会释放一个指针,并且1/10运行时它恰好为非null,因为它从未初始化过。我重新运行了调试程序将近一百次,所以我有点好奇为什么调试时从来没有发生过SEGFULT

gdb/etc是否在启动进程之前将进程内存初始化为0

gdb/etc是否在启动进程之前将进程内存初始化为0

没有

根据具体的细节(堆栈上是否有未初始化的指针?)

调试器确实稍微改变了流程环境,因此一些bug确实或多或少地在它们下面显示出来


另外,有一些功能强大的工具,如Valgrind和Memory Sanitarizer,可以很容易地找到这些bug。

我认为答案是否定的,但不确定(因此只是一个微不足道的评论)。但是,这确实说明了为什么调试器不是跟踪此类易变错误的工具:内存和地址清理器是作业的工具,它们的工作方式是可预测的。变量是在堆栈上分配的类中的未初始化字段。我以前用过valgrind,但我觉得很难。记忆消毒剂看起来更容易使用,所以我来看看。谢谢