Valgrind meldet Speicherlecks unter OS X 10.8.1
Ich verwende Valgrind Version 3.8.0 unter OS X 10.8.1, Mountain Lion. In Bezug auf die Kompatibilität mit 10.8.1Valgrinds Seite sagt (meins kursiv):
Valgrind 3.8.0 funktioniert weiter {x86, amd64} -darwin (Mac OS X 10.6 und 10.7, mit eingeschränkter Unterstützung für 10.8).
Ich weiß also, dass es für 10.8.1 nur "eingeschränkte Unterstützung" gibt. Dennoch,dieser Fehlerbericht sagt (meins kursiv):
Diese(die neueste Version 3.8.0) machtValgrind Kompilieren und Ausführen kleiner Programme unter OSX 10.8. Seien Sie jedoch gewarnt, dass es immer noch mit größeren Apps funktioniert und 32-Bit-Programme überhaupt nicht richtig überprüft werden (die meisten Fehler werden von Memcheck übersehen).
OK das passt. Valgrind sollte also, wenn überhaupt, am 10.8.1 funktionieren. Also jetzt meine Frage:
Ich konnte Valgrind mit wenig Mühe dazu bringen, auf 10.8.1 zu kompilieren, aber ich sah einige seltsame Ergebnisse, als ich es auf ein paar kleinen C-Programmen ausführte. Um die möglichen Ursachen des Problems zu beheben, habe ich schließlich das folgende "Programm" geschrieben:
int main () {
return 0;
}
Nicht sehr aufregend und wenig Platz für Bugs, würde ich sagen. Dann habe ich es kompiliert und durch Valgrind geführt:
gcc testC.c
valgrind ./a.out
Hier ist meine Ausgabe:
==45417== Command: ./a.out
==45417==
==45417== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==45417== WARNING: Expect incorrect results, assertions and crashes.
==45417== WARNING: In particular, Memcheck on 32-bit programs will fail to
==45417== WARNING: detect any errors associated with heap-allocated data.
==45417==
--45417-- ./a.out:
--45417-- dSYM directory is missing; consider using --dsymutil=yes
==45417==
==45417== HEAP SUMMARY:
==45417== in use at exit: 58,576 bytes in 363 blocks
==45417== total heap usage: 514 allocs, 151 frees, 62,442 bytes allocated
==45417==
==45417== LEAK SUMMARY:
==45417== definitely lost: 8,624 bytes in 14 blocks
==45417== indirectly lost: 1,168 bytes in 5 blocks
==45417== possibly lost: 4,925 bytes in 68 blocks
==45417== still reachable: 43,859 bytes in 276 blocks
==45417== suppressed: 0 bytes in 0 blocks
==45417== Rerun with --leak-check=full to see details of leaked memory
==45417==
==45417== For counts of detected and suppressed errors, rerun with: -v
==45417== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Ich weiß, dass Valgrind am 10.8.1 nicht für die Primetime bereit ist. Trotzdem würde ich es gerne hier verwenden können - ich muss es nur für kleine Programme verwenden, und nichts ist geschäftskritisch, wenn die Ergebnisse genau stimmen. Aber es wird eine Tonne von Lecks in einem Programm gemeldet, die sehr unwahrscheinlich zu sein scheinen. Somit:
Was soll ich tun, um das zu beheben?
Andere Information:
Hinzufügen einer absichtlich durchgesickerten Ganzzahltut Erhöhen Sie die Anzahl "definitiv verloren" um die entsprechenden 4 Bytes.Ebenso wird absichtlich ein Aufruf an malloc weitergeleitet, indem der Speicher nicht freigegeben wirdtut Erhöhen Sie die Anzahl der Heap-Zuordnungen entsprechend.Kompilieren mit dem-g
flag und renne dann zu Valgrind (um das zu adressierendSYM directory is missing
Fehler) bewirkt, dass der Fehler verschwindet, abernicht Ändern Sie das Problem, dass Tonnen von Speicherlecks gemeldet werden.