Wenn ich es richtig verstanden habe, muss die CPU HW watchpoints unterstüzen. Es muss Onchip eine Architektur vorhanden sein, die eine Variablenveränderung mitbekommen, während die Instruktion noch läuft. Richtig so? Das würde auch die beschränkte Verfügbarkeit der hw wpoints erklären. Was ist dann mit den SW Watchpoints? Wie wird das abgewickelt? Ich hab mir überlegt, dass der Compiler nach der Analyse weiss, von welchen Stellen auf eine bestimtme Variable geschrieben wird. Also könnte er eine davor und danach einen call zu einer Speicher/Überprüfungsroutine ausführen und danach auf Gleichheit prüfen. Falls ungleich wird dann die Überprüfungsroutine in einer Halt Anweisung münden. (wie man es von breakpoints kennt) Läuft das so ab? Es ist schon etwas länger her, als ich mit 486 experementiert habe, aber ich glaub damals gab es noch diese halt machinenkodes, extra für den Anwendungsfall breakpoint. Heute könnte ich mir vorstellen, dass die ganzen IDEs mit eingebauten Debuggern den Code gar nicht auf der HW Maschine ausführen, sondern auf einem Emulator .. und dann bräuchte man keine halt instruction mehr. Das reicht erst mal an Fragen :)
Martin schrieb: > Wenn ich es richtig verstanden habe, muss die CPU HW watchpoints > unterstüzen. Es muss Onchip eine Architektur vorhanden sein, die > eine Variablenveränderung mitbekommen, während die Instruktion noch > läuft. Richtig so? Ich denke du meinst schon das richtige. Zumindest so ungefähr. Wenn eine MMU im System vorhanden ist, dann bietet die normalerweise auch die Möglichkeit auf bestimmte Speicherseiten Zugriffsberechtigungen zu vergeben. Das sieht dann so aus, dass die MMU zb. bei einem Schreibzugriff in den Speicher eine Exception auslöst, die die CPU in eine spezielle Behandlungsroutine zwingt. In dieser Routine wird die Adresse gegen die Liste der Watchpoints gegengeprüft und wenn es eine überwachte Adresse ist eine entsprechende Aktion ausgelöst. > Was ist dann mit den SW Watchpoints? Wie wird das abgewickelt? > Ich hab mir überlegt, dass der Compiler nach der Analyse weiss, > von welchen Stellen auf eine bestimtme Variable geschrieben wird. > Also könnte er eine davor und danach einen call zu einer > Speicher/Überprüfungsroutine ausführen und danach auf Gleichheit > prüfen. Der Compiler hat damit so gut wie gar nichts zu tun. Der Compiler hat lediglich die Aufgabe für den Debugger Synchronisationspunkte in den Code einzubauen, damit zb im Debugger ein Single Step Betrieb möglich ist. Das ist aber nicht spezifisch für SW-Watchpoints sondern gibt einfach nur dem Debugger die Möglichkeit einzelne Maschinencodeabschnitte wieder einzelnen Source Code Anweisungen zuordnen zu können. Tja. Und da klinkt sich jetzt der SW Watchpoint ein. Der Debugger führt eine Anweisung aus, genauso wie er es auch im Single Step Betrieb tun würde. Danach klappert er seine Watchpoints ab und vergleicht den aktuellen Memory Inhalt mit dem was sich der Debugger zuvor weggespeichert hat. Stimmen sie überein, dann löst der Watchpoint nicht aus und führt die nächste Anweisung aus. Gibt es eine Änderung, dann hält der Debugger das Programm an, indem er aus dem 'automatischen Single Step' ausbricht und dem Benutzer wieder die Kontrolle übergibt. Was mir an deinen Erklärungen nicht gefällt ist, dass du immer von Variablen sprichst. Watchpoints operieren auf Speicherzellen und Variablen kommen nur deshalb ins Spiel, weil sie eine für den Benutzer einfache Möglichkeit darstellen eine bestimmte Speicherstelle zu identifzieren. Aber dann ist auch schon Schluss. Muss auch Schluss sein, denn Watchpoints würden viel von ihrer Mächtigkeit verlieren, wenn sie auf Variablenebene operieren würden. Watchpoints sind besonders dann nützlich, wenn Speicherzellen auf irgendwelchen dunklen Kanälen ihren Wert ändern, weil zb. ein Array Overflow stattgefunden hat. Dazu muss aber auf Byte oder Word Ebene direkt im Speicher geprüft werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.