gdb - C 调试器是否将所有进程内存初始化为 0?
问题描述
我最近遇到了一个间歇性的未初始化指针问题,这导致了段错误。我尝试使用 gdb 和 vscode 的内置调试器 (cppdbg) 对其进行调试,但我无法复制它,该问题仅在我正常运行可执行文件时出现。如果指针不为空,则相关代码会释放一个指针,并且 1/10 运行它恰好是非空的,因为它从未被初始化。我重新运行了调试器将近一百次,所以我有点好奇为什么调试时段错误从未发生过。
gdb/etc 是否在启动进程之前将进程内存初始化为 0?
解决方案
gdb/etc 是否在启动进程之前将进程内存初始化为 0?
不。
根据具体的细节(堆栈上的未初始化指针是不是?),错误没有出现在调试器下可能是个意外。
调试器确实会稍微改变进程环境,因此一些错误确实或多或少地在它们下面显示出来。
PS 有强大的工具,例如 Valgrind 和 Memory Sanitizer,可以很容易地找到这些错误。
推荐阅读
- bash - 将常量添加到文件名的 Bash 脚本
- flutter - 在当前页面动画完成动画后立即制作 PageRouteBuilder 动画
- regex - 正则表达式捕获部分行
- keycloak - 如何在所需操作的 processAction 方法中获取身份验证器配置
- sas - 在这种情况下,“变量”的价值是什么?我不确定如何在 SAS 中使用 trunc
- python - TypeError:需要一个类似字节的对象,而不是 Python3 中的“str”
- mysql - Percona db 集群复制到 wsrep_cluster_address=gcomm 之外的节点
- r - 当级别数低于使用 dplyr 的给定阈值时,将数值变量转换为因子
- jenkins-pipeline - 防止同一存储库上的两个更改请求以主节点为目标在同一节点上运行
- python - socket.recv() 未在发送端触发