Boehm GC: Как эффективно отлаживать разбитые объекты Heap?

StackOverflow https://stackoverflow.com/questions/4532825

Вопрос

При запуске моей программы я получаю следующие ошибки от GC Boehm (с определением 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, и проблема исчезла!

Если кто -то пробежит через это, надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top