首页 > 解决方案 > C 调试器是否将所有进程内存初始化为 0?

问题描述

我最近遇到了一个间歇性的未初始化指针问题,这导致了段错误。我尝试使用 gdb 和 vscode 的内置调试器 (cppdbg) 对其进行调试,但我无法复制它,该问题仅在我正常运行可执行文件时出现。如果指针不为空,则相关代码会释放一个指针,并且 1/10 运行它恰好是非空的,因为它从未被初始化。我重新运行了调试器将近一百次,所以我有点好奇为什么调试时段错误从未发生过。

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

标签: gdb

解决方案


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

不。

根据具体的细节(堆栈上的未初始化指针是不是?),错误没有出现在调试器下可能是个意外。

调试器确实会稍微改变进程环境,因此一些错误确实或多或少地在它们下面显示出来。

PS 有强大的工具,例如 Valgrind 和 Memory Sanitizer,可以很容易地找到这些错误。


推荐阅读