Ich benutze Boehm GC und Valgrind.
Aber es scheint, dass Valgrind einen Überlauf in GC_malloc'ed-Puffern nicht erkennen kann.
Kennt jemand Tools, die einen Pufferüberlauf für Boehm GC erkennen können?
Unser CheckPointer- Tool kann möglicherweise das tun, was Sie möchten.
Sie haben nicht ausdrücklich gesagt, wie Valgrind gescheitert ist, nur dass es so war. Es ist bekannt, dass Valgrind bestimmte Arten von Speicherzugriffsfehlern nicht erkennen kann. Es kann sicherlich keine Pufferüberläufe für einen Puffer innerhalb einer Struktur oder einen Puffer erkennen, der im lokalen Stack-Speicherplatz zugewiesen ist, da es keine Kenntnis von der Größe dieser Puffer hat. Der Bereich um den Puffer herum ist per Definition gültiger Datenraum, und daher sind Zugriffe aus Sicht von Valgrind "gültig", auch wenn sie sich außerhalb des Pufferrands befinden.
Im Gegensatz dazu liest CheckPointer Ihren C-Quellcode und sammelt Informationen über die Datentypen (und damit deren Größe). Dadurch erhält es die Schlüsselinformationen, die für diese Erkennung erforderlich sind. Nach dem Sammeln von Typinformationen instrumentiert es dann den Code, um nach Fehlern beim Speicherzugriff zu suchen. Es wird die oben genannten Fehler und eine Vielzahl anderer abfangen.
CheckPointer ist derzeit nur für C verfügbar.
Dies ist ein Produkt meiner Firma, also verstehen Sie dies nicht als Empfehlung. Ich dokumentiere lediglich, dass es existiert und anscheinend Ihren Anforderungen entspricht.
Wenn Sie GC_DEBUG zuvor definieren, #include "gc.h"
führt es einige Überprüfungen durch, einmal pro Sammlung überprüft es bekannte Objekte, um zu sehen, ob sie gehämmert aussehen oder nicht. Ich finde...
Referenzen:
https://stackoverflow.com/q/4532825/32453
https://github.com/ivmai/bdwgc/blob/master/tests/smash.c
https://github.com/ivmai/bdwgc "Debugging-Möglichkeiten"
Steve Barnes
Mawg sagt, Monica wieder einzusetzen
Thomas Weller
rogerpack