Ich möchte ein Tool zum Diagnostizieren von Bugs, die nach der Installation des Benutzers aufgetreten sind, und von nicht initialisierten Bugs. Ich denke über Sanitizer (Speicher und/oder Adresse) und Valgrind nach. Aber ich habe sehr wenig Ahnung von ihren Vor- und Nachteilen. Kann jemand die Hauptmerkmale, Unterschiede und Vor- und Nachteile von Sanitizer und Valgrind beschreiben?
Bearbeiten: Ich fand einige Vergleiche wie: Valgrind verwendet DBI (Dynamic Binary Instrumentation) und Sanitizer verwendet CTI (Compile-Time Instrumentation). Valgrind macht das Programm viel langsamer (20x), ob Sanitizer viel schneller als Valgrind (2x) läuft. Wenn jemand mir einige wichtigere Punkte nennen kann, ist dies eine große Hilfe.
Ich denke, Sie werden das wiki nützlich finden.
TLDR Hauptvorteile von Desinfektionsmitteln sind
Nachteile sind
Ein großer Unterschied besteht darin, dass die in LLVM enthaltenen Desinfektionsprogramme Speicher und Thread implizit große Bereiche des Adressraums abbilden (z. B. durch Aufrufen von mmap(X, Y, 0, MAP_NORESERVE|MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE, -1, 0)
über Terabytes von Adressen Speicherplatz in der x86_64-Umgebung). Auch wenn sie diesen Speicher nicht unbedingt zuweisen, kann die Zuordnung in restriktiven Umgebungen (z. B. mit angemessenen Einstellungen für ulimit
-Werte) zu Problemen führen.