c - 伯姆GC : how to effectively debug smashed heap objects?

标签 c garbage-collection valgrind boehm-gc

当运行我的程序时,我从 Boehm GC(定义了 GC_DEBUG)中得到以下错误:

GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...

以上持续约20次。

奇怪的是,我找不到程序有什么问题,它按预期运行,而且没有崩溃。

我可以在禁用 GC 的情况下编译我的程序。然后我可以用它运行 valgrind,但奇怪的是,valgrind 没有发现任何问题!

这可能是 Boehm GC 中的问题——我应该忽略它吗?

有没有人知道如何有效地调试它?

或者,谁能解释一下上面的消息是什么意思

最佳答案

3个多月后回答我自己的问题...

我已经尝试将每个指针记录到一个文件中,并与发出粉碎警告的指针进行比较。然而,这并没有导致任何结果,可疑的指针来自整个代码库的各种分配(没有一个特定的地方可能被破坏)。

同时,在没有GC的情况下,valgrind没有报告任何错误,当然这并不意味着不可能仍然存在错误。

但是,我想如果这个特定版本的 GC 可能有一个微妙的错误,我会尝试一下。我使用的是最新的稳定版 GC 7.1。我升级到 7.2alpha4,问题消失了!

如果有人遇到这个问题,希望这会有所帮助。

关于c - 伯姆GC : how to effectively debug smashed heap objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532825/

相关文章:

编译具有冲突类型的 C 代码

c# - 使用从 Win32 API CreateFile(C++、P/Invoke)返回的句柄创建的 FileStream 对象(.NETCF、C#)是否容易发生 .NET 垃圾收集

java - 为什么字符串去重不是标准的

unit-testing - Valgrind 自动测试——它们在某处使用过吗?

c++ - Valgrind:抛出自定义异常时为 "invalid read size 1"

Windows 中的 C 编程套接字 - winsock2.h 链接库?

c - C 有像 Java 那样的垃圾收集器吗?

c - 如何使用select同时读取连接?套接字/c

java - JVM内存管理

c - valgrind 中的内存