Boehm GC: как эффективно отлаживать разбитые объекты кучи? - PullRequest
2 голосов
/ 26 декабря 2010

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

6 голосов
/ 13 марта 2011

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

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

В то же время, без GC, valgrind не сообщал о каких-либо ошибках, но, конечно, это не означает, что все еще возможны ошибки.

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

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

...