Invalid-Pointer Fehler abfangen
-
Hallo,
Ich arbeite im Moment an einen Code-Editor für eine C ähnliche Programmiersprache. Folgendes Problem: Ähnlich wie in vielen anderen Code-Editoren soll der User Variablen überwachen können. Klappt alles wunderbar, solange der User keinen Mist macht.
Folgendes Beispiel
int* crash_me_please = 0xcdcdcdcd;
Falls der User nun in seinem Watch-Fenster "*crash_me_please" als Watch-Variable angibt, kommt es logischerweise zu einem Dump, wenn ich versuche den entsprechenden Wert zu lesen.
In Visual Studio werden solche "Fehler" zu dem Watch-Ergebnis: "CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden".. einfache Frage: Wie schafft Microsoft / bzw. jeder andere Debug-Hersteller es, diese Fehler abzufangen?Vielen Dank,
TimoPS: Reicht es einfach zu überprüfen ob der Pointer außerhalb des Programms liegt? Dies wäre natürlich möglich, aber damit ist längst nicht jeder Fehler abfangbar (bsp: int* blub = new int; delete blub; ==> jetzt auf blub zugreifen).
-
Warum sollte das ein Fehler sein? Du wirst an der Stelle nicht darum rum kommen dir gültige Adressen selber zu merken. Sprich du musst jedes new/malloc und delete/free mitloggen. Unterscheiden musst du dabei natürlich ob jetzt delete oder delete[] aufgerufen werden darf.
-
rein theoretisch könnte man auch die hardware emulieren. wenn dann das programm im emulator läuft, muß man keine sorgen haben, dass gleich die ganze ide hängt.