Boehm GC: Как эффективно отлаживать разбитые объекты Heap?
-
13-10-2019 - |
Вопрос
При запуске моей программы я получаю следующие ошибки от 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, и проблема исчезла!
Если кто -то пробежит через это, надеюсь, это поможет.