当运行我的程序时,我从 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/