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,问题就消失了! 如果有人遇到这个,希望这会有所帮助。     

要回复问题请先登录注册