Wie setzen Sie einen Haltepunkt auf einem Speicherplatz in dbx?
-
20-08-2019 - |
Frage
Ein Mitarbeiter hat ein C-Programm, das wegen eines beschädigten Speichers in einer vorhersagbaren Weise versagt. Er möchte dbx
verwenden, um den Speicherplatz zu überwachen, sobald es um zugewiesen ist, den Code zu identifizieren, die die Korruption verursacht.
Ist das möglich? Wenn ja, was ist die Syntax einen Haltepunkt im Moment der Korruption zu produzieren?
Wenn nicht, was einen guten Ansatz zur Festsetzung diese Art von Problem sein würde?
(Meine übliche Taktik ist an der Quelle Kontrolle, um zu sehen, was ich in letzter Zeit geändert haben, da diese in der Regel die Ursache ist. Aber der Code in Frage klingt, als ob es überhaupt nur durch Glück gearbeitet, so dass nicht . Arbeit Außerdem habe ich eliminiere mich schon als die Schuldige von nie mit dem Code gearbeitet; -).
Lösung
Mit sah tiefer, es die Lösung auf neuere Versionen von dbx
erscheint, ist so etwas wie:
stop access w <address>, <size>
Da <address>
und <size>
Ausdrücke sein können, können Sie schreiben Befehle wie:
stop access w &p, sizeof(int)
Dies setzt voraus, p
ein Zeiger ist, und wir wollen das erste Wort überwachen es verweist.
Ich habe auch über ein feines Tutorial auf Tracking laufen und stampfen Speicher Bugs. Es verwendet gdb
statt dbx
, aber die Prinzipien sollten gleich sein.
Andere Tipps
Unter AIX, möchten Sie stophwp verwenden:
(dbx) help stophwp
stophwp <address> <size>
Stop execution when the contents of the specified
memory region change. This is a accomplished in
hardware and may not be available on all models.
Ich bin kein Solaris dev, aber Sie können dies tun, mit GDB und Hardware-Haltepunkten