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 - я должен просто игнорировать это?

У кого-нибудь есть идеи, как эффективно это отладить?

Или кто-нибудь может объяснить, что именно означает это сообщение ?


person Max    schedule 26.12.2010    source источник


Ответы (1)


Чтобы ответить на мой собственный вопрос более чем через 3 месяца...

Я пробовал регистрировать каждый указатель в файл и сравнивать с указателями, которые давали предупреждение о сбое. Однако это ни к чему не привело, подозрительные указатели исходили из различных распределений по всей кодовой базе (ни одного конкретного места, которое могло быть нарушено).

Между тем, без GC valgrind не сообщал об ошибках, но, конечно, это не означает, что возможные ошибки все еще существуют.

Тем не менее, я решил попробовать, может быть, в этой конкретной версии GC есть небольшая ошибка. Я использовал последнюю стабильную версию GC 7.1. Я обновился до 7.2alpha4, и проблема ушла!

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

person Max    schedule 13.03.2011