www.mikrocontroller.net

Forum: PC-Programmierung Watchpoint HW und SW


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.