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; -).

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top