2010-12-26 6 views
2

Wenn mein Programm läuft ich die folgenden Fehler aus dem Boehm GC erhalten (mit GC_DEBUG definiert):Boehm GC: Wie effektiv zerschlagene Heap-Objekte zu debuggen?

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) 
... 

Die obigen weiterhin etwa 20-mal.

Seltsamerweise kann ich nichts falsch mit dem Programm finden, es tut, was es soll, und stürzt nicht ab.

Ich kann mein Programm kompilieren und den GC deaktivieren. Dann kann ich Valgrind damit laufen, aber seltsamerweise findet Valgrind keine Probleme!

Könnte es ein Problem innerhalb von Boehm GC sein - sollte ich es einfach ignorieren?

Hat jemand irgendwelche Ideen, wie man dies effektiv zu debuggen?

Oder kann jemand erklären, was genau die obige Nachricht bedeutet? später

Antwort

6

Um meine eigene Frage mehr als 3 Monate zu beantworten ...

Ich habe versucht, jeden Zeiger in eine Datei protokollieren und zu vergleichen mit Zeigern, die die zertrümmerten Warnung gab. Das führte jedoch nirgendwohin, die verdächtigen Zeiger kamen von verschiedenen Zuteilungen über die Codebasis (kein bestimmter Ort, der vielleicht kaputt war).

In der Zwischenzeit, ohne GC, Valgrind hat keine Fehler gemeldet, aber das bedeutet natürlich nicht, dass es nicht möglich ist, dass Fehler weiterhin bestehen.

Allerdings dachte ich, ich würde versuchen, wenn diese bestimmte Version des GC vielleicht einen subtilen Fehler hat. Ich benutzte die neueste stabile Version GC 7.1. Ich habe auf 7,2alpha4 aufgerüstet und das Problem ist weg!

Wenn jemand darüber hinwegläuft, wird das hoffentlich helfen.

+0

+1 für die Veröffentlichung der Antwort nach all dieser Zeit – pmg