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 - я должен просто игнорировать это?
У кого-нибудь есть идеи, как эффективно отладить это?
Или кто-нибудь может объяснить, что именно означает вышеуказанное сообщение?
1 ответ
Чтобы ответить на мой вопрос более чем через 3 месяца...
Я попытался записать каждый указатель в файл и сравнить с указателями, которые выдавали предупреждение. Однако, это ни к чему не привело, подозрительные указатели приходили из разных источников по всей кодовой базе (ни одно конкретное место, которое могло быть сломано).
В то же время, без GC, valgrind не сообщал о каких-либо ошибках, но, конечно, это не означает, что все еще не существует возможных ошибок.
Тем не менее, я подумал, что попробую, если эта конкретная версия GC имеет небольшую ошибку, может быть. Я использовал последнюю стабильную версию GC 7.1. Я обновился до 7.2alpha4, и проблема ушла!
Если кто-то столкнется с этим, надеюсь, это поможет.