Debugger
Beschreibung
Der Debugger erlaubt dem Nutzer, die Schritte einer Hight-Level- Definition darzustellen.
Er wird in der Form 'DEBUG name' eingeschaltet. Dabei ist 'name' das Dictonary-Wort, welches verfolgt werden soll. Bei der Ausfuehrung des Wortes werden die einzelnen Schritte und der Parameterstack auf dem Bildschirm angezeigt.
Sonderbefehle waehrend der Anzeige:
<F> ermoeglicht die zusaetzliche Eingabe von Forth-Befehlen und deren Interpretation, bis mit RESUME die Bearbeitung fortgesetzt wird
<C> schaltet auf kontinuierlichen Lauf um
<Q> bricht die Bearbeitung des Wortes ab und stellt dessen Standartabarbeitung wieder ein
GLOSSAR
BUG (–) Forth
macht das Vokabular BUG zum ersten durchsuchten
(DEBUG) (adr1 adr2–) Bug
setzt die obere und die untere Grenze zu dem gegebenen Wert und
patcht NEXT (adr1 niedere und adr2 obere Adr)
DEBUG (name(–) Forth
schaltet den Bearbeitungsvorgang fuer das Wort 'name' ein.
Patcht NEXT zur debuggierten Version von NEXT und setzt die
Grenzen.
RES (–adr) Bug
Variable- falls wahr, Debugarbeit wird wieder aufgenommen
RESUME (–) Bug
schaltet RES ein, und setzt damit die Niederschrift fort.
SLOW (–adr) Bug
Variable- falls wahr, kontinuierlicher Betrieb
TRACE (ip–) Bug
zeigt den Inhalt des Parameterstacks und den Namen des naechsten
Wortes, welches zur Ausfuehrung vorgesehen ist.
Es wartet auf Tastenbetaetigung, <ET> falls SLOW nicht wahr ist
'UNNEST (pfa–'pfa) Bug
sucht das Ende des bearbeiteten Wortes und uebergibt diese pfa
Bedienung des Debuggers
Für die Programmtestung ist der Debugger ein unentbehrliches Hilfsmittel und jeder, der sich ernsthaft mit Programmierung in FORTH beschäftigt, sollte sich mit diesem Debugger vertraut machen.
Nach dem F83-Standard haben wir die folgenden Worte zur Verfügung:
DEBUG und RESUME.
Nach Aufruf des Vokabulars BUG auch
UNBUG, SLOW ON, SLOW OFF.
Mit DEBUG 'name' wird ein Wort zum Test eingerichtet, wobei dabei noch nichts sichtbares passiert. Wird jedoch das Wort 'name' direkt oder indirekt, das heißt wenn das Wort Bestandteil eines weiteren Wortes ist, gerufen, wird das Wort im Einzel-Schritt-Betrieb abgearbeitet. Zu Beginn der Single-Step-Abarbeitung steht der aktuelle Stackinhalt sowie auf der nächsten Zeile das nächste Wort aus dem Code-Body. Nach Betätigen einer beliebigen Taste erscheint der neue Stackeintrag sowie das folgende Wort.
Am Beispiel von COPY möchte ich das verdeutlichen:
Wir geben
DEBUG COPY /ret/ 1 2 COPY /ret/ ein:
1 2 2 -- 1 2 2 ?ENOUGH -- 1 2 SWAP -- 2 1 BLOCK -- 2 32256 DROP -- 2 BLK -- 2 4637 empty UPDATE -- empty SAVE-BUFFERS -- empty UNNEST -- ok
Während des Debug-Betriebes ist ein Abbruch mit 'Q' erreichbar. Es erscheint die Ausschrift „unbug“.
Mit der Taste 'C' ist ein Ausschalten des Single-Step-Modes möglich. Der Debug-Betrieb bleibt erhalten, aber der Rest des Wortes wird hintereinander abgearbeitet bis zu UNNEST bzw. bis zu einer beliebigen Tastenbetätigung. 'F' bewirkt den vorübergehenden Abbruch des Debug-Betriebes. Mit Hilfe des Forth-Systems kann eine weitere Untersuchung erfolgen.
So kann man z. B. falsche Werte auf dem Parameterstack ändern.
Eine andere Möglichkeit ist, mit DEBUG 'neuname' die Untersuchung eines Bestandteils der Definition zu erreichen (in unserem Beispiel etwa BLOCK oder SAVE-BUFFFERS).
RESUME setzt dann den Debug-Betrieb dort fort, wo er mit 'F' unterbrochen wurde.
Nach Aufruf von dem Vokabular BUG können auch die folgenden Worte genutzt werden, welche nur nach Erreichen des Wort-Endes wirksam sind.
Mit UNBUG wird der Debug-Betrieb nach Erreichen des Wort-Endes ausgeschaltet, wie mit 'Q' während der Abarbeitung des Wortes.
SLOW ON bedeutet einen kontinuierlichen Step-Betrieb, wie 'C' während der Abarbeitung. SLOW OFF ist das Gegenteil und bewirkt den Step-Betrieb.
Ein Experimentieren mit dem Debugger lohnt sich auf jeden Fall und es wird sich sehr bald die Unentbehrlichkeit dieses Werkzeuges beweisen.
(Michael Scholz)