Valgrind ist eins der wichtigsten Debugging-Tools für C/C++-Programmierer unter x86/Linux.
Homepage: http://valgrind.org/
Lizenz: GPL, Version 2
Valgrind führt ein Programm vollständig in einer Virtual Machine aus und weiß daher genau, welche Speicherbereiche bereits initialisiert, allokiert oder freigegeben wurden. Zusätzlich werden alle Datenstrukturen gepadded, so dass erkannt wird, wenn Speicherbereiche angesprochen werden, die eigentlich nicht angesprochen werden sollten.
Dadurch kann Valgrind double frees, Buffer-Überlaufe (off-by-one etc.) oder Sprungentscheidungen (if .. else), die auf noch nicht initialisierten Variablen beruhen, erkennen. Wer sich in einem C/C++-Programm mit einem heisenbug oder mysteriösen Abstürzen in sonst eigentlich tadellosen Bibliotheken konfrontiert sieht, für den ist valgrind oft das erste Hilfsmittel. Es lohnt sich aber auch, im regulären Testbetrieb, seine Programme standardmäßig mit valgrind zu prüfen. Oft werden dadurch Programmierfehler gefunden, bevor sie überhaupt erst ein Problem werden.1
Zusätzlich zu den oben erwähnten Funktionen erleichtert valgrind auch das Aufspüren von Speicherlecks und anderen Problemen.
Valgrind funktioniert am Besten mit Programmen, die Debugging-Information enthalten (also mit dem Flag -g in gcc/g++ kompiliert wurden), damit es Probleme zeilengenau aufspüren kann.
Eine Alternative zum Aufspüren von Speicherlecks mit graphischer Benutzeroberfläche ist Memprof, das aber ebenfalls nur für x86 zu haben ist.
- Python hat mit dem anderen überhaupt nichts zu tun, Python ist selbst in C oder C++ geschrieben. Python selber zieht genauso shared libraries an, die in C/C++ geschrieben wurden wie z.b php oder perl.
- Jaein - wenn man Software mit Python statt C/C++ entwickelt, hat man die Probleme erst gar nicht, die man mit valgrind debuggen kann - es wird also die Ursache umgangen, statt die Symptome zu debuggen.
- In welcher Sprache Python selbst implementiert ist spielt dabei keine Rolle, das ist ein Problem anderer Leute.
Alternativ kann man auch viel mit Python programmieren, da entstehen solche Probs erst gar nicht. (1)