2012-04-06 17 views
1

In meinem Code habe ich ein Objekt, dessen Inhalt vollständig Müll ist. Ich denke, in einem anderen Teil des Codes ist ein falsches Schreiben passiert und durch (un) Glück hat es an der Adresse des Objekts geschrieben, das ich erwähnte.So erkennen Sie falsches Schreiben

Ich frage mich, ob es ein Tool gibt, das mir jeden Schreibvorgang, den eine Speicheradresse erhält, mitteilen kann, damit ich den Ursprung dieses Fehlers verfolgen kann.

Antwort

4

Die meisten Debugger unterstützen Haltepunkte beim Schreiben. In Visual Studio müssen Sie zum Beispiel Ihre Anwendung im Debugger starten, einbrechen (an einem normalen Haltepunkt nahe der Initialisierung der fehlerverdächtigen Variablen), dann gehen Sie auf "Debug/Neuer Haltepunkt/Neuer Haltepunkt" im Menü.

In SoftIce können Sie den BPM-Befehl verwenden. :) Das kann man auch beim Speicherzugriff abbrechen.

+2

Jeder, der SoftIce kennt, bekommt +1 von mir. – ildjarn

+0

Gute alte Tage ... :) – Eugene

0

Je nach Ihrer Plattform sollten Sie in der Lage sein, diese Speicherregion mit etwas wie VirtualProtect zu sperren (ich denke, es ist mprotect auf Linux). Auf diese Weise erhalten Sie Zugriffsverletzung/segfault, wenn auf die Speicherregion nicht ordnungsgemäß zugegriffen wird. Und wenn Sie ZugriffViolation/Segfault erhalten, können Sie sie im Debugger abfangen.

Um jedoch die Speicherregion zu sperren, sollte die normale Region auf die Speicherseite ausgerichtet sein (zumindest bei Windows), was ein Problem sein könnte.

Abgesehen davon könnten Sie in Ihrem Debugger Datenhaltepunkte verwenden.

0

Wenn Sie Windows verwenden, können Sie Global Flags (gflags.exe, Teil der Debugging-Tools für Windows) verwenden und PageHeap aktivieren. (Geben Sie auf der Registerkarte Bild den Namen Ihrer EXE-Datei ein, und klicken Sie dann bei Aktivierung auf das Kontrollkästchen "Seitenhaufen aktivieren".) Führen Sie anschließend Ihr Programm aus.

Denken Sie daran, es nach dem Beenden wieder auszuschalten.