|
DeskDebug-Anleitung
Version 1.09 (2007/02/20)
Vorbereitung Ihrer Software zur Untersuchung
'DeskDebug' kann nur Programme mit Debug-Infos untersuchen;
die ausführbare Datei muss den Dateityp 'DebImage' (&FD3) haben.
Solche werden erzeugt, indem in der Software zur Erzeugung ausführaber Dateien
die Debug-Option eingeschaltet ist. Einige allgemeine Entwicklungs-Werkzeuge sind:
Wenn Sie ObjASM benutzen:
Wenn Sie CC benutzen:

Wenn Sie C++ benutzen:

Und wenn Sie Ihr Projekt linken:
Eröffnen Ihrer Projekt-Untersuchung
- Klicken Sie zweifach auf das 'DeskDebug'-Symbol im Verzeichnis-Fenster.
Dies lädt und startet den Debugger 'DeskDebug'.
Das 'DeskDebug'-Programmsymbol erscheint auf der Symbolleiste.
- Klicken Sie im Verzeichnis-Fenster zweifach auf das Symbol des zu untersuchenden Programms.
Das 'DeskDebug' Steuer-Fenster öffnet sich,
und die Untersuchung (Debug-Session) beginnt.
- Klicken Sie die Menu-Taste über dem Steuerfenster, um das
Steuerungs-Menu zu öffnen.
Erste Schritte
- Auf dem Eintrag 'Anzeigen' bewegen Sie den Mauszeiger nach rechts, um das
Anzeigen-Untermenu zu öffnen.
- Durch Klicken auf Einträge in diesem Untermenu schalten Sie die entsprechenden
Anzeige-Fenster ein und aus.
- Aktivieren Sie in jedem Fall die Anzeige 'Quelle-Liste'.
- Wenn Sie das zu untersuchende Programm in der Assembler-Sprache geschrieben haben,
dann aktivieren Sie zusätzlich die Anzeigen 'Symbol-Tabelle', 'ARM-Register'
und vielleicht 'FPU-Register'.
- Wenn Sie das zu untersuchende Programm in der Hochsprache 'C' geschrieben haben,
dann aktivieren Sie auch die Anzeigen 'Variablen-Liste' und vielleicht 'Prozeduren-Liste'.
- Durch Klicken auf den Knopf 'Einzelschritt' im Steuer-Fenster können Sie in
Einzelschritten durch Ihr Programm gehen. Sie können auch [F5] drücken, um dies zu tun.
Der Ausführungs-Ort wird im Disassembler- und im Quelle-Liste-Fenster angezeigt,
wenn diese offen sind. Die Zeile, wo die Ausführung jetzt steht, ist mit einem Stern
markiert und hat eine andere Farbe.
- Wenn Sie das zu untersuchende Programm in der Hochsprache 'C' geschrieben haben,
dann aktivieren Sie die Option 'Quelle-Schritt', so dass die Einzelschritte gemäss
Quelle-Anweisungen ausgeführt werden.
Andernfalls erfolgen die Einzelschritte gemäss ARM-Befehlen.
- Wenn Sie die Option 'Übergehe Prozeduren' aktivieren, werden Prozeduren und Funktionen
in Echtzeit ausgeführt; andernfalls werden sie in Einzelschritten ausgeführt.
Wenn Sie bereits in einer Prozedur oder Funktion sind, können Sie diese bis zu ihrem Ende
in Echtzeit laufen lassen, indem Sie die Schaltfläche 'Fortsetzen' mit {Spezial} klicken.
(Dazu wird ein Haltepunkt automatisch gesetzt und entfernt.)
- Mit den Schaltflächen 'Keine Null-Events', 'Keine Zeiger-Events' und 'Keine Mitteilungen'
können Sie bewirken, dass das untersuchte Programm keine Null-Ereignisse,
keine Mauszeiger-Ereignisse oder keine Wimp-Mitteilungen empfängt.
- Durch Klicken auf die Schaltfläche 'Fortsetzen' lassen Sie das untersuchte Programm in
Echtzeit bis zum nächsten Haltepunkt weiter laufen. Sie können dazu auch die Taste [F6]
drücken.
Sie haben verschiedene Möglichkeiten, Haltepunkte zu setzen oder zu entfernen.
- Im Disassembler-Fenster und im Quelle-Listing-Fenster können Sie einfach mit {Spezial}
auf die Zeile klicken, wo der Haltepunkt gesetzt oder entfernt werden soll. Wenn ein Haltepunkt
gesetzt ist, erscheint am Anfang der Zeile ein '@', und die Zeile ändert ihre Farbe.
- In den Fenstern mit der Symbol-Tabelle und der Prozeduren-Liste können Sie ebenfalls mit
{Spezial}-Klick auf eine Zeile einen Haltepunkt an der durch das Symbol bezeichnete Stelle
oder in der genannten Prozedur setzen und löschen.
- Das Menu auf dem Haltepunkt-Fenster gibt weitere Möglichkeiten zum Setzen und Entfernen
von Haltepunkten.
- Im Fenster 'Haltepunkt setzen' können Sie eine Haltepunkt-Adresse eingeben.
Durch Klicken der Schaltfläche 'Beenden' auf dem Steuerfenster können Sie das
untersuchte Programm jederzeit beenden. Manchmal müssen Sie diese Schaltfläche
zweimal klicken. Sie können zu diesem Zweck auch die Taste [F2] drücken.
Wenn im untersuchten Programm ein Fehler auftritt, erscheint das
Fehler-Fenster.
Darin sehen Sie den Programm-Namen, die Fehler-Nummer, die Adresse, wo der Fehler aufgetreten
ist, und die vollständige ursprüngliche Fehlermeldung. Danach können Sie das
untersuchte Programm nicht mehr fortsetzen, sondern nur noch beenden.
Programm-Fenster und -Menus
Um den Debugger zu starten, klicken Sie zweifach auf sein Symbol im Verzeichnis-Fenster.
Um das zu untersuchende Programm zu starten, klicken Sie auf sein Symbol im Verzeichnis-Fenster,
oder ziehen Sie das Symbol auf das 'DeskDebug'-Symbol auf der Symbolleiste.
Wenn das Anwendungs-Verzeichnis eine ausführbare Datei vom Typ 'DebImage' enthält,
wird die '!Run'-Datei in diesem Verzeichnis gelesen und dann die ausführbare
Datei gestartet, so dass die Untersuchung beginnt. Sie können auch die '!Run'-Datei
oder jede andere Datei im Anwendungs-Verzeichnis zweifach klicken oder sie auf das
'DeskDebug'-Symbol auf der Symbolleiste ziehen. Wenn eine ausführbare Datei
des Typs 'DebImage' im selben Verzeichnis ist, wird die Obey-Datei gelesen und dann die
ausführbare Datei gestartet, so dass ebenfalls die Untersuchung beginnt.
Sie können auf eine ausführbare Datei vom Typ 'DebImage' zweifach klicken oder sie auf
das 'DeskDebug'-Symbol auf der Symbolleiste ziehen. Die Datei wird direkt
ausgeführt, und die Untersuchung beginnt sofort.
Steuerungs-Fenster
Wenn das untersuchte Programm gestartet ist, wird das 'DeskDebug Steuerung'-Fenster
geöffnet. In diesem Fenster finden Sie die folgenden Bedienungs-Teile:

| Symbol |
Aktion |
Taste |
Bemerkungen |
| Einzelschritt |
Klick mit {Auswahl}: Macht einen Einzelschritt im untersuchten Programm.
Wenn 'Übergehe Prozeduren' eingeschaltet: Prozeduren und Funktionen werden in Echtzeit
ausgeführt, andernfalls werden sie in Einzelschritten untersucht. |
F5 |
Dieser Knopf ist ausgegraut, wenn das untersuchte Programm 'Wimp_Poll'
gerufen hat und auf ein Wimp-Ereignis wartet, und nach einem Fehler. |
Klick mit {Spezial}: Macht einen Einzelschritt im untersuchten Programm.
Wenn 'Übergehe Prozeduren' eingeschatlet: Prozeduren und Funktionen werden in
Einzelschritten untersucht, andernfalls werden sie in Echtzeit ausgeführt. |
Ctrl+F5 |
| Fortsetzen |
Klick mit {Auswahl}:
Das untersuchte Programm wird immer bis zum nächsten Haltepunkt in Echtzeit fortgesetzt. |
F6 |
Dieser Knopf ist ausgegraut, wenn das untersuchte Programm 'Wimp_Poll'
gerufen hat und auf ein Wimp-Ereignis wartet, und nach einem Fehler. |
Klick mit {Spezial}:
Ausserhalb von Prozeduren und Funktionen wird das untersuchte Programm bis zum nächsten
Haltepunkt in Echtzeit fortgesetzt. Innerhalb von Prozeduren und Funktionen wird das Programm
bis zur nächsten Rücksprung-Adresse in Echtzeit ausgeführt. |
Ctrl+F6 |
| Beenden |
Klick mit {Auswahl}:
Beendet das untersuchte Programm und schliesst alle Debugger-Fenster. |
F2 |
'DeskDebug' fragt, ob Sie die Untersuchung wirklich beenden wollen.
Nach Klicken auf 'OK' oder Drücken der Eingabe-Taste wird die Untersuchung ohne weitere
Aktionen und Meldungen beendet. Wenn das untersuchte Programm auf irgend eine andere Art
beendet wird, erzeugt 'DeskDebug' eine entsprechende Meldung. |
Klick mit {Spezial}:
Beendet das untersuchte Programm und startet es sofort neu. |
Ctrl+F2 |
'DeskDebug' fragt, ob Sie die Untersuchung wirklich beenden und neu starten wollen.
Nach Klicken auf 'OK' oder Drücken der Eingabe-Taste wird die Untersuchung ohne weitere
Aktionen und Meldungen beendet und sofort neu gestartet.
Wenn das untersuchte Programm auf irgend eine andere Art beendet wird, erzeugt 'DeskDebug'
eine entsprechende Meldung. In diesem Fall wird es nicht neu gestartet. |
| Übergehe Prozeduren |
Wenn eingeschaltet, werden mit Prozeduren und Funktionen in Echtzeit ausgeführt.
Andernfalls können Sie in Einzelschritten durch diese Routinen gehen. |
F7 |
Wenn Sie 'Einzelschritt' mit {Spezial} klicken oder [F5] mit [Ctrl] drücken,
verhält sich diese Option genau umgekehrt. |
| Quelle-Schritt |
Wenn eingeschaltet, ist jede Quelle-Anweisung ein Einzelschritt.
Andernfalls ist jeder ARM-Befehl ein Einzelschritt. |
F8 |
|
| Keine Null-Events |
Wenn eingeschaltet, empfängt das untersuchte Programm keine Null-Events. |
F9 |
Das ist nützlich, wenn das untersuchte Programm Null-Events zulässt.
Man kann deren Wiederholung unterbinden. |
| Keine Zeiger-Events |
Wenn eingeschaltet, empfängt das untersuchte Programm keine
Pointer-Leaving- und keine Pointer-Entering-Events. |
F10 |
Dies nützlich für Programme, die diese Events zulassen.
Man kann sie unterbinden, um mit dem Mauszeiger nicht
immer den Fenstern des untersuchten Programms ausweichen zu müssen. |
| Keine Mitteilungen |
Wenn eingeschaltet, empfängt das untersuchte Programm keine Mitteilungen. |
F11 |
Das ist nützlich, wenn das untersuchte Programm die Mitteilung 'DataOpen'
versteht und während der Untersuchung eine Anwendung gestartet oder eine
Datei geöffnet wird, auf die das untersuchte Programm nicht reagieren soll. |
| Eingabe-Fokus |
Holt den Eingabe-Fokus ins Steuerfenster. Sind Listen-Fenster offen, wechselt der
Eingabefokus beim Klicken eines Pfeiles vom Steuerfenster nacheinander zu jedem von ihnen. |
Ctrl+Tab |
Beachten Sie auch die Erklärung in der Tabelle
Tastendruck-Aktionen bei [Ctrl+Tab]. |
| Zustand |
Zeigt den Zustand des untersuchten Programmes an. |
- |
Die folgenden Zustände werden angezeigt:
Frei laufend: Das Programm läft in Echtzeit oder wartet auf ein Wimp-Ereignis.
Haltepunkt angetroffen: Das Programm steht nach einem Haltepunkt still.
Halt bei SWI-Aufruf: Das Programm steht nach einem Halt vor einem SWI-Aufruf.
Einzelschrit...: Das Programm steht nach einem Einzelschritt still.
Halt wegen Fehler: Das Programm steht nach einem Fehler still. Keine Fortsetzung mölich! |
Klicken mit 'Menu' in diesem Fenster öffnet das Steuerungs-Menu.
Tastendruck-Aktionen
| Taste |
Aktion |
| F2 |
Beendet das untersuchte Programm und schliesst alle Debugger-Fenster. Zusätzliches
Drücken von [Ctrl] beendet das untersuchte Programm und startet es sofort neu.
Hier gilt auch das, was weiter oben fürs Steuerfenster bei 'Beenden' steht. |
| F3 |
Öffnet das Sichern als-Fenster. Hat eines der Fenster
für Speicherdump, Symbole, Prozeduren oder Variablen den Eingabe-Fokus, wirkt diese Taste
auch hier. Im Sichern-Fenster ist dann der richtige Radio-Knopf bereits gewählt. |
| F4 |
Öffnet das unten erklärte Such-Fenster.
Zusätzliches Drücken von [Shift] setzt eine Suche fort. Hat eines der Fenster
für Speicherdump, Symbole, Prozeduren oder Variablen den Eingabe-Fokus, wirkt diese Taste
auch hier. Im Such-Fenster ist dann der richtige Radio-Knopf bereits gewählt. |
| F5 |
Führt einen Einzelschritt im untersuchten Programm aus. Zusätzliches
Drücken von [Ctrl] kehrt das Verhalten von 'Übergehe Prozeduren' ins Gegenteil um. |
| F6 |
Setzt das untersuchte Programm in Echtzeit bis zum nächsten Haltepunkt fort.
Zusätzliches Drücken von [Ctrl] innerhalb einer Prozedur oder Funktion lässt
diese bis zu ihrer Rücksprung-Adresse in Echtzeit laufen. |
| F7 |
Schaltet Prozeduren-Abarbeitung zwischen Einzelschritt und Übergehen um. |
| F8 |
Schaltet Einzelschitt zwischen Prozessor-Befehl und Quelle-Anweisung um. |
| F9 |
Schaltet Null-Event-Übergabe ein und aus. |
| F10 |
Schaltet Maus-Zeiger-Event-Übergabe ein und aus. |
| F11 |
Schaltet Mitteilungs-Empfang ein und aus. |
| Ctrl Tab |
Bringt den Eingabe-Fokus aus dem Steuerfenster der Reihe nach in folgende Fenster:
Speicherdump, Disassembler, Haltepunkte, Quelle-Liste, Quelle-Namen, Symbole, Prozeduren,
Variablen, Sonder und zurück zum Steuer-Fenster; dann schaltet der Eingabe-Fokus ab.
Zusätzliches Drücken von [Shift] kehrt die Reihenfolge um. Ist der Eingabe-Fokus in
keinem 'DeskDebug'-Fenster, kommt er mit einer dieser Tastenkombinationen ins Steuerfenster, falls
keine Anwendung den Eingabe-Fokus hat, oder wenn dieser in einer Anwendung ist, die wenigstens
eine dieser beiden Tastenkombinationen nicht versteht. |
| |
Wenn eines der Fenster Speicherdump, Disassembler, Haltepunkte, Quelle-Liste,
Quelle-Namen, Symbole, Prozeduren, Variablen und Sonder den Eingabe-Fokus hat, kann es mit
den folgenden Tasten gescrollt werden: |
| Seite auf / ab |
Rollt eine Fenster-Höhe auf- oder abwärts. |
| Ctrl Seite auf / ab |
Rollt eine Zeile auf- oder abwärts. |
| Cursor links / rechts |
Rollt eine Spalte nach links oder rechts. |
| Ctrl Cursor links / rechts |
Rollt eine Fenster-Breite nach links oder rechts. |
| |
Wenn eines der Fenster 'Suchen' oder 'Sichern' den Eingabe-Fokus hat, gilt Folgendes: |
| Seite auf / ab |
Schaltet zwischen den Radio-Knöpfen für die Art der Suche oder Sicherung um. |
| |
Im Suchen-Fenster gilt dann zusätzlich: |
| Ctrl C |
Schaltet die Option 'Beachte Grosschreibung' ein oder aus. |
| Ctrl W |
Schaltet die Option 'Benutze Joker' ein oder aus. |
Steuerungs-Menu
 |
Anzeigen |
Führt zum unten erklärten
Anzeigen-Untermenu. |
| Suchen |
Führt zum Such-Fenster (auch mit [F4] erreichbar). |
| Sichern |
Führt zum Sichern als-Fenster
(auch mit [F3] erreichbar). |
Such-Fenster
| Speicher |
Mit den fünf Radio-Knöpfen oben im Fenster wählen
Sie den Bereich, worin Sie etwas suchen wollen: Speicher, Quelle-Namen, Symbole, Prozeduren und
Variablen. Sie können auch mit [Seite auf] und [Seite ab] zwischen den Radioknöpfen
umschalten. |
| Quelle-Namen |
| Symbole |
| Prozeduren |
| Variablen |
| Suchtext |
Ins Schreibfeld 'Such-Begriff' können Sie bis 63 Zeichen eingeben. |
| Beachte Gross-Schreibung |
Aktiviert die Unterscheidung zwischen grossen und kleinen Buchstaben während der
Suche. Sie können diese Option auch mit [Ctrl C] schalten. |
| Benutze Joker |
Aktiviert die beiden kleinen Schreibfelder unterhalb von ihm, in die Sie die
Joker für einzelne Zeichen und für Zeichenfolgen eingeben können.
Sie können diese Option auch mit [Ctrl W] schalten.
Die beiden Jokerzeichen müssen vorhanden und verschieden sein.
Der Joker für eine Zeichenfolge kann nur am Anfang und / oder am Schluss des
Suchbegriffes stehen; bei der Suche im Speicher nur am Schluss des Suchbegriffs. |
| Abbruch |
Schliesst das Suchfenster und bricht die Suche ab. |
| Suchen |
Startet die Suche im oben gewählten Bereich.
Klicken mit {Auswahl} oder Drücken der Eingabetaste schliesst das Fenster;
klicken mit {Spezial} oder zusätzliches Festhalten von [Ctrl]
beim Drücken der Eingabetaste lässt es offen. |
| Weiter suchen |
Setzt die Suche da fort, wo die vorherige angehalten hat.
Klicken mit {Auswahl} oder Drücken der Eingabetaste zusammen mit [Shift] schliesst das
Fenster; klicken mit {Spezial} oder zusätzliches Festhalten von [Ctrl] beim
Drücken der Eingabetaste zusammen mit [Shift] lässt es offen.
Diese Möglichkeit ist auch von ausserhalb des Such-Fensters mit [Shift+F4] erreichbar. |
Das Such-Fenster kann man mit [F4] von den folgenden Fenstern und deren Menus aus öffnen:
Speicher, Symbole, Prozeduren und Variablen. Hierbei ist der entsprechende Radio-Knopf bereits
gewählt. Auch vom Steuerungs-Fenster aus kann man das Such-Fenster öffnen, aber dann
muss man den passenden Radioknopf selber wählen.
Drücken der Eingabe-Taste allein wirkt wie ein Klick auf 'Suchen'.
Drücken der Eingabe-Taste mit [Shift] wirkt wie ein Klick auf 'Weiter suchen'.
Drückt man zusätzlich auch [Ctrl], bleibt das 'Suchen'-Fenster offen.
Sichern-Fenster
 |
Mit den fünf Radio-Knöpfen wählen Sie die Liste, die Sie sichern wollen:
Speicherdump, Quelle-Namen, Symbole, Prozeduren oder Variablen. Sie können auch mit
[Seite auf] und [Seite ab] zwischen den Radioknöpfen umschalten. |
| Die übrigen Symbole und Knöpfe entsprechen dem RISC OS Standard. |
| Drag'n'drop der Datei in ein Verzeichnis-Fenster oder eine Anwendung ist möglich. |
Diese Funktion ist auch mit [F3] erreichbar. Weiterhin ist sie aufrufbar
von den Menus der Fenster für Symbole, Prozeduren oder Variablen.
Wird das Sichern-Fenster von einem dieser Menus aus gerufen,
wird der passende Radio-Knopf automatisch gewählt. |
Anzeigen-Untermenu
 |
ARM-Register |
Wenn eingeschaltet, öffnet sich das
ARM CPU Register-Fenster, wenn das untersuchte Programm nach einem Haltepunkt oder
Einzelschritt still steht. |
| FPU-Register |
Wenn eingeschaltet, öffnet sich das
Gleitpunkt-Register-Fenster, wenn das untersuchte Programm nach einem Haltepunkt oder
Einzelschritt still steht. |
| Wimp-Ereignis |
Wenn eingeschaltet, wird das
Wimp-Ereignis-Fenster geöffnet. |
| Kontext |
Wenn eingeschaltet, wird das
Kontext-Fenster geöffnet. |
| Speicher |
Wenn eingeschaltet, wird das
Speicher-Fenster geöffnet. |
| Disassembler |
Wenn eingeschaltet, wird das
Disassembler-Fenster geöffnet. |
| Haltepunkte |
Wenn eingeschaltet, wird das
Haltepunkte-Fenster geöffnet. |
| Quelle-Liste |
Wenn eingeschaltet, wird das
Quelle-Listing-Fenster geöffnet. |
| Quelle_Dateinamen |
Wenn eingeschaltet, öffnet sich
das Quelle_Dateinamen-Fenster. |
| Symbole-Tabelle |
Wenn eingeschaltet, öffnet sich
das Symbole-Tabelle-Fenster. |
| Proceduren-Liste |
Wenn eingeschaltet, öffnet sich
das Prozeduren-Liste-Fenster. |
| Variablesn-Liste |
Wenn eingeschaltet, öffnet sich
das Variablen-Liste-Fenster. |
ARM-Register-Fenster

Die Register-Inhalte erscheinen in den von 0 bis 15 nummerierten Anzeigen.
Die Zustäde der vier Bedingungs-Flaggen erscheinen in Anzeigen 'N','Z', 'C' und 'V'.
Falls Kontext-Inhalte gezeigt werden, stehen Fragezeichen für unbestimmte Werte.
Das Grösse-Umschalt-Symbol zeigt oder versteckt folgende die Einstellmöglichkeit,
die im untern Fensterbereich angeordnet ist:
Durch Klicken auf einen der beiden Pfeile kann das Register gewählt werden, dessen Inhalt
als Text angezeigt wird. Die Registernummer steht in der quadratischen Anzeige, und der
dem Register-Inhalt entsprechende Text (bis zu 4 Zeichen) erscheint in der breiten Anzeige.
FPU-Register-Fenster

Die Register-Inhalte erscheinen in den von 0 bis 7 nummerierten Anzeigen.
Die Zustäde der FPU-Flaggen erscheinen in Anzeigen 'IX', 'UF', 'OF', 'DZ' und 'IV'.
Falls Kontext-Inhalte gezeigt werden, stehen Fragezeichen für unbestimmte Werte.
Das Grösse-Umschalt-Symbol zeigt oder versteckt folgende Einstellmöglichkeiten,
die im untern Fensterbereich angeordnet sind:
Mit den beiden Radio-Knöpfen 'Punkt' und 'Komma' kann man das
Zeichen zur Trennung des Dezimalbruches vom ganzzahligen Teil wählen.
Die Option 'Rundung' bewirkt das Aufrunden der Zahl.
Die Option 'Füllen' bewirkt ein Auffüllen des Dezimalbruches mit Nullen bis
zur Anzahl der Stellen, die im Feld 'Dez.-Stellen' angegeben ist.
Diese Anzahl kann man mit den beiden Pfeilen rechts von der Anzeige verändern.
Alle diese Einstellungen wirken auch auf die Anzeige allfälliger Gleitkomma-Zahlen
im Variablen-Fenster.
Speicherdump-Fenster

Es zeigt den Anwendungs-Arbeitsspeicher in hexadezimaler und textualer Form.
Klicken mit Menu in diesem Fenster öffnet das
Speicherdump-Menu.
Disassembler-Fenster

Wenn Sie mit {Auswahl} auf einen ARM-Befehl klicken, werden das Disassembler- und
das Quelle-Listing-Fenster so synchronisiert, dass Sie den betreffenden Ort in beiden Fenstern
sehen können. Wenn Sie mit {Spezial} klicken, wird an der betreffenden Stelle
zusätzlich ein Haltepunkt gesetzt, falls keiner da war, oder ein bestehender Haltepunkt
wird entfernt. Klicken mit Menu in diesem Fenster öffnet das
Disassembler-Menu.
Wimp-Ereignis-Fenster

In der oberen linken Anzeige steht die Wimp-Ereignis-Nummer.
In der oberen rechten Anzeige steht die Wimp-Ereignis-Beschreibung.
In der unteren linken Anzeige steht die Wimp-Mitteilungs-Aktions-Nummer
oder die Werkzeugkiste-Ereignis-Nummer.
In der unteren rechten Anzeige steht die Wimp-Mitteilungs-Beschreibung
oder die Werkzeugkiste-Ereignis-Beschreibung.
Kontext-Fenster

| Zeige nur Kontext mit Quelle-Liste-Bezug |
Wenn diese Option aktiv ist, werden nur Kontexte mit Bezug zu einer Quelle-Liste
angezeigt. Andernfalls werden auch Kontexte der unteren Ebene angezeigt. |
| Erneuere Register und Variablen bei Wechsel |
Wenn diese Option aktiv ist, werden bei Kontext-Wechseln die Register-Fenster und die
Variablen-Liste erneuert. |
| Aktuell |
Synchronisiert das Disassembler- und das Quelle-Listing auf den Beginn der aktuellen
Prozedur. |
| Auswärts |
Bewegt die Stapel-Rückverfolgung einen Rahmen nach aussen und synchronisiert
das Disassembler- und das Quelle-Listing auf den Beginn der betreffenden Prozedur. |
| Einwärts |
Bewegt die Stapel-Rückverfolgung einen Rahmen nach innen und synchronisiert
das Disassembler- und das Quelle-Listing auf den Beginn der betreffenden Prozedur. |
| Quelle |
Zeigt den Namen der für den Kontext gültigen Quelle-Datei. |
| Prozedur |
Zeigt den Namen der Kontext-Prozedur. |
| Adresse |
Zeigt den Aufruf-Ort aktuellen Prozedur in der Kontext-Prozedur. |
| Zeile |
Zeigt die Anfangs-Zeile der Kontext-Prozedur. |
| Spalte |
Zeigt die Anfangs-Spalte der Kontext-Prozedur. |
Haltepunkt-Fenster

Das Fenster enthät zuerst die nach aufsteigenden Haltepunkt-Adressen sortierte
Haltepunkt-Liste, dann die nach aufsteigenden SWI-Nummern sortierte SWI-Halt-Liste.
Jede Haltepunkt-Zeile enthält der Reihe nach die folgenden Angaben:
Halt-Adresse, Halt-Art, Quellendatei-Name, Quelle-Zeile, Prozedur-Name.
Der Buchstabe hinter jeder Haltepunkt-Adresse bedeutet:
F = Fester Haltepunkt; kann nur von Hand gesetzt und gelöscht werden.
T = Zeitweiser Haltepunkt; wird automatisch gesetzt und gelöscht,
kann aber auch von Hand gelöscht werden.
Wenn Sie mit {Auswahl} auf eine Haltepunkt-Adresse klicken, werden 'Disassembler'- und
'Quelle-Liste'-Fenster so synchronisiert, dass Sie die betreffende Stelle in diesen
beiden Fenstern sehen. Wenn Sie mit {Spezial} klicken, wird zusätzlich der betreffende
Haltepunkt gelöscht. Vorsicht! Der entsprechende Eintrag verschwindet aus der Liste!
Klicken auf eine SWI-Halt-Zeile kann die Disassember- und Quelle-Liste nicht synchronisieren,
weil nicht die Adressen, sondern nur die SWI-Nummern vermerkt werden.
Hingegen wird beim {Spezial}-Klick auf eine SWI-Halt-Zeile der entsprechende Eintrag
gelöscht, und die Zeile verschwindet aus dem Fenster.
Klicken mit Menu in diesem Fenster öffnet das
Haltepunkte-Menu.
Quelle-Liste-Fenster

Klicken mit Menu in diesem Fenster öffnet das
Quelle-Liste-Menu.
Wenn Sie mit {Auswahl} auf einen ARM-Befehl klicken, werden das Disassembler- und
das Quelle-Listing-Fenster so synchronisiert, dass Sie den betreffenden Ort in beiden Fenstern
sehen können. Wenn Sie mit {Spezial} klicken, wird an der betreffenden Stelle
zusätzlich ein Haltepunkt gesetzt, falls keiner da war, oder ein bestehender Haltepunkt
wird entfernt.
Quelle-Namen-Fenster

Es enthält die Namen aller Quelle-Dateien.
Beim Klicken auf eine Zeile wird das entsprechende Listing gezeigt.
Symbole-Fenster

Die Buchstaben nach jedem Symbol-Werten bedeuten:
1. Buchstabe: A = Absolut, C = Code, D = Daten, N = Nullfüll-Bereich;
2. Buchstabe: L = Lokal, G = Global.
Wenn Sie mit {Auswahl} auf einen Symbol-Namen klicken, werden 'Disassembler'- und 'Quelle'-
Fenster so synchronisiert, dass Sie die betreffende Stelle in diesen beiden Fenstern sehen.
Zeigt das Symbol in einen Daten-Bereich, erscheint die betreffende Stelle im 'Speicher'-Fenster.
Wenn Sie mit {Spezial} klicken, und das Symbol zeigt in einen Programm-Bereich, zeigen das
'Disassembler'- und 'Quelle'-Fenster die betreffende Stelle. Zusätzlich wird ein Haltepunkt
gesetzt, falls keiner da war, oder ein bestehender Haltepunkt wird entfernt.
Klicken mit Menu in diesem Fenster öffnet das
Symboltabelle-Menu.
Variablen-Liste-Fenster

Bei verschachtelten Strukturen sind die Unter-Strukturen eingerückt.
Jede Zeile, die unmittelbar beim linken Rand beginnt, enthält folgende Angaben:
- Variable-Typ (einfach, Feld, Struktur)
- Zahl-Typ (mit oder ohne Vorzeichen, Ganzzahl, Gleitkommazahl)
- Verwendeter Speicherplatz (Byte, Wort)
- Variable-Name (mit einem Stern, wenn es ein Zeiger ist)
Zwischen den '<' und '>':
- Speicher-Adresse oder Register-Nummer
- Quelle-Zeile- und -Spalte-Nr., wo die Variable auf der Quelle-Liste steht.
- Speicher-Zugriff-Klasse (extern, statisch, Register, automatisch)
Nach dem '=' steht der Variable-Inhalt.
Auf eingerückten Zeilen steht zsischen den '<' und '>' nur
die Speicher-Adresse oder Register-Nr.
Klicken mit Menu in diesem Fenster öffnet das
Variable-Liste-Menu.
Prozeduren-Liste-Fenster

Die Spalten im Prozeduren-Fenster haben folgende Bedeutungen (von links nach rechts):
Prozedur-Name, relativer Quelle-Datei-Name, Quelle-Zeile-Nr. und Quelle-Spalte-Nr. des
Prozedur-Beginns, Quelle-Zeile-Nr. und Quelle-Spalte-Nr. des Prozedur-Endes, Anzahl der
Rückkehr-Adressen, so viele Rückkehr-Adressen wie eben angegeben.
Klicken mit Menu in diesem Fenster öffnet das
Prozeduren-Liste-Menu.
Wenn Sie mit {Auswahl} auf einen Prozedur-Namen klicken, werden 'Disassembler'- und
'Quelle'-Fenster so synchronisiert, dass Sie den Prozedur-Beginn in diesen beiden Fenstern sehen.
Wenn Sie eine Adresse hinter einem Prozedur-Namen klicken, werden 'Disassembler'- und
'Quelle'-Fenster so synchronisiert, dass Sie die betreffende Stelle in diesen beiden Fenstern
sehen. Wenn Sie mit {Spezial} klicken, wird zusätzlich an betreffender Stelle ein
Haltepunkt gesetzt oder ein allfällig vorhandener Haltepunkt entfernt.
Speicherdump-Menu
 |
Suchen |
Führt zum Suchen-Fenster zur Textsuche im
Speicher |
| Sichern |
Führt zum 'Sichern'-Fenster zum Sichern des
Speicher-Inhalts als Text-Datei. |
| Zeige Adresse |
Führt zum Fenster Zeige Speicher-Ort |
Zeige Speicher-Ort-Fenster
 |
Keine (von Hand) |
Schaltet die automatische Bewegung des Speicherdump-Fensters aus.
|
| Register |
Ermöglicht die Wahl einer Register-Nr. zwischen 0 und 15 mit den beiden Pfeilen
rechts von der Register-Anzeige. Das Speicherdump-Fenster wird
dann so eingestellt, dass die im gewählten Register enthaltene Adresse sichtbar wird. |
| Adresse |
Ermöglicht die Eingabe einer Adresse ab &8000 aufwärts ins Eingabefeld.
Sie können das '&'. Die Adressen von &0 bis &F werden als Register-Nrn.
von 0 bis 15 verstanden. Das Speicherdump-Fenster wird dann so
eingestellt, dass die Adresse im Schreibfeld sichtbar wird. |
| Zeige / Eingabetaste drücken |
Die gewählten Angaben werden aktiv. Sie können auch die [Eingabetaste]
drücken. |
| Abbruch |
Belässt den alten Zustand und schliesst das Fenster. |
Disassembler-Menu
Zeige Programm-Ort-Fenster

- Im Rahmen 'aktuell' steht bei 'gewählt' die Adresse, auf deren
Zeile der Mauszeiger beim Öffnen des Menus gewesen ist. Bei 'Ausführung'
steht die Adresse, wo das Programm gegenwärtig still steht.
- Im Rahmen 'Ziel' kann man wählen zwischen 'Ausführung'
und 'Adresse'.
- Ist 'Ausführung' gewählt, gilt der Ausführungs-Ort als Ziel.
- Ist 'Adresse' gewählt, kann man eine Aresse ins Eingabefeld tippen.
Bleibt dieses leer, gilt der beim Öffnen des Menus gewählte Ort als Ziel.
- Durch Klicken auf den Knopf 'Zeige' oder Drücken der Eingabetaste werden
das Disassembler- und Quelle-Liste-Fenster so eingestellt, dass sie das
gewünschte Ziel und den umgebenden Bereich anzeigen.
- Der Knopf 'Abbruch' belässt die Anzeigen unverändert.
Disassembler-Optionen-Fenster

Im Rahmen 'ARM-Befehls-Schreibweise' wählt man mit Radio-Knöpfen eine
der drei folgenden Einstellungen:
- Gemischt: Alle ARM-Befehle werden mit grossen und kleinen Buchstaben geschrieben,
also 'Add', 'Sub', 'MovLtS' usw.
- Gross: Alle ARM-Befehle werden nur mit grossen Buchstaben geschrieben.
- Klein: Alle ARM-Befehle werden nur mit kleinen Buchstaben geschrieben.
Im Rahmen 'Spezial-Befehle' sind die beiden folgenden Optionen:
- MOV R0,R0 als NOP: Bei aktiver Option wird 'NOP' statt 'MOV R0,R0' angezeigt.
- Zeige ADRL: Der Pseudo-Befehl 'ADRL' wird gezeigt, wenn diese Option aktiv ist und
der Disassembler einen entsprechenden Zusammenhang erkennt.
Im Rahmen 'Register-Namen' kann man die folgenden zwei Optionen aktivieren.
- APCS-Schreibweise: Wenn diese aktiviert ist, lauten die Register_Namen:
'a1' bis 'a4', 'v1' bis 'v6', 'sl',
'fp', 'ip', 'sp', 'lr' und 'pc'.
Andernfalls lauten die Register-Namen: 'r0' bis 'r12', 'sp',
'lr' und 'pc'.
- Grosse Buchstaben: Bei aktiver Option erscheinen die Register-Namen mit grossen Buchstaben,
andernfalls mit kleinen Buchstaben.
Im Rahmen 'Marken und Symbole' befindet sich die umschaltbare Anzeige für die
Begrenzung der angezigten Länge der Marken und Symbole mit den dazugehörenden
Ab- und Aufwärts-Pfeilen.
- Wenn in der Anzeige 'Aus' steht, werden keine Marken und Symbole,
sondern die entsprechenden Werte angezeigt.
- Wenn in der Anzeige 'Voll' steht, werden die Marken und Symbole ohne Begrenzung
in voller Länge angezeigt.
- Wenn in der Anzeige eine Zahl steht, werden von den Marken und Symbole nur so viele Zeichen
angezeigt, wie die Zahl angibt.
Quelle-Liste-Menu
 |
Haltepunkt |
Setzt oder entfernt einen Haltepunkt an der Adresse, die in der Zeile steht, wo der
Mauszeiger vor dem Öffnen des Menus war. |
| Zeige Ort |
Führt zum Zeige Programm-Ort-Fenster. |
Haltepunkte-Menu
Setze Haltepunkt-Fenster
Schreiben Sie eine Haltepunkt-Adresse ins Eingabefeld. Klicken auf 'Setzen'
oder Drücken der Eingabetaste setzt den Haltepunkt. Zusätzliches
Festhalten der [Ctrl]-Taste hält das Fenster offen.
Tilge Haltepunkt-Fenster
 |
Nur Ausgewälten tilgt den Haltepunkt, dessen Adresse in der Zeile steht,
wo der Mauszeiger vor dem Öffnen des Menus war. |
| Nur zeitweise tilgt nur die zeitweisen Haltepunkte. |
| Nur feste tilgt nur die festen Haltepunkte |
| Alle tilgt alle Haltepunkte. |
| Die gewünschte Aktion wird durch 'Tilgen' ausgelöst oder durch
'Abbruch' abgebrochen. |
Setze Halt bei SWI-Fenster

Schreiben Sie eine SWI-Nr. oder einen SWI-Namen ins Eingabefenster. Klicken auf
'Setzen' oder Drücken der Eingabetaste setzt den SWI-Halt. Zusätzliches
Festhalten der [Ctrl]-Taste hält das Fenster offen.
Tilge Halt bei SWI-Fenster
 |
Nur Ausgewälten tilgt den SWI-Halt, dessen Adresse in der Zeile steht,
wo der Mauszeiger vor dem Öffnen des Menus war. |
| Alle tilgt alle Haltepunkte. |
| Die gewünschte Aktion wird durch 'Tilgen' ausgelöst oder durch
'Abbruch' abgebrochen. |
Symbol-Tabelle- und Prozeduren-Menu
 |
Suchen |
Führt zum 'Suchen'-Fenster zur Suche nach Symbolen. |
| Sichern |
Führt zum 'Sichern'-Fenster zum Sichern der
Symbol-Tabelle. |
| Haltepunkt |
Setzt oder entfernt einen Haltepunkt an der Adresse des Symbols auf der Zeile, wo der
Mauszeiger vor dem Öffnen des Menus war. |
| Zeige Ort |
Ist die Symbol-Adresse im Programm-Bereich, dann werden das Disassembler- und das
Quelle-Listing-Fenster so eingestellt, dass sie den betreffenden Ort zeigen.
Ist die Symbol-Adresse im Daten-Bereich, dann wird das Speicherdump-Fenster so eingestellt,
dass es den betreffenden Ort zeigt. |
Variablen-Menu
 |
Suchen |
Führt zum Such-Fenster zum Suchen von Variablen. |
| Sichern |
Führt zum Sichern-Fenster zum Sichern der Variablen-Liste |
| Optionen |
Führt zum Variablen-Optionen-Fenster zum Wählen von Variablen-Optionen. |
Variablen-Optionen-Fenster

Im Rahmen 'Variablen-Suche findet:' sind vier Radio-Knöpfe.
Zwei davon erlauben die Wahl, ob die Suche Haupt- oder Unter-Variablen findet.
Zwei weitere wählen, ob die Suche Variablen-Namen oder Typ-Namen findet.
Der Rahmen 'Anzeige-Begrenzungen' enthät die drei mit Pfeilen umschaltbaren
Anzeigen 'Array-Elemente', 'Struktur-Elemente' und 'Schachtelungs-Stufen'. Wenn
'Alle' in einer Anzeige steht, werden alle Elemente oder Stufen angezeigt, sonst
werden nur so viele Elemente oder Stufen angezeigt, wie die Zahl angibt.
Ganz unten sind die Knöpfe 'Abbruch' zum Beibehalten der alten Wahl und
'Anwenden' zum Setzen der neuen Wahl. Klickt man diese Knöpfe mit {Spezial},
bleiben das Menu und das Fenster offen.
Programm-Symbol und Menu auf der Symbolleiste
 |
Klick mit {Auswahl} öffnet vor dem Start einer Debug-Session das
Parameter-Fenster oder bringt nach dem Start einer Debug-Session die Fenster Steuerung,
ARM-Register, FPU-Register, Wimp-Ereignisse und Kontext in den Vordergrund.
Klick mit {Spezial} öffnet immer das Quelle-Pfad-Fenster.
Klick mit [Shift] und {Auswahl} startet ein bereits untersuchtes Programm neu.
Klick mit [Shift] und {Spezial} öffnet das Einstellungen-Fenster. |
 |
Info |
Zeigt das 'DeskDebug' Program-Info-Fenster. |
| Hilfe |
Startet die interaktive Hilfe. |
| Anzeigen |
Führt zum oben erklärten Anzeigen-Untermenu. |
| Neustart |
Startet eine bereits untersuchte Anwendung nochmals wie bei der ersten Untersuchung.
Dieser Eintrag ist ausgegraut, wenn bereits eine Untersuchung läuft. |
| Quelle-Pfad |
Öffnet das Quelle-Pfad-Fenster. |
| Parameter |
Öffnet das Parameter-Fenster. |
| Einstellungen |
Öffnet das Einstellungen-Fenster. |
| Beenden |
Beendet das untersuchte Programm und den Debugger selbst.
Wenn noch ein Programm untersucht wird, fragt 'DeskDebug', ob Sie die Untersuchung und 'DeskDebug'
selbst beenden wollen. Klicken auf 'OK' oder Drücken der Eingabe-Taste beendet alles. |
Quelle-Pfad-Fenster

Ins Schreibfeld können Sie Zusätze zum Pfad zu den Quelle-Dateien (relative Pfadnamen)
oder ganze (absolute) Pfadnamen eingeben. Statt dessen können Sie das Verzeichnis mit
den Quelle-Dateien auf dieses Fenster ziehen. Dadurch wird der entsprechende
Pfadname ins Schreibfeld übertragen. Klicken Sie dann auf 'Anwenden' um den
Pfadnamen wirklich zu setzen. Klicken auf 'Abbruch' verwirft die Eingaben.
Sie können den Quelle-Pfad vor dem Start des zu untersuchenden Programms setzen.
Wenn Sie nachträglich feststellen, dass im 'Quelle-Listing'-Fenster nur die
Zeilen-Nummern erscheinen, ändern Sie den Quelle-Pfad mit Hilfe des Quelle-Pfad-Fensters.
Wenn das Schreibfeld leer ist, gilt der in der Debug-Info vorgegebene Pfad,
und 'DeskDebug' erwartet die Quelle-Datei-Verzeichnisse da, wo sie beim Erzeugen
(also beim Assemblieren oder Compilieren des Programms) abgelegt wurden.
^ bedeutet das 'Eltern'-Verzeichnis. Wenn Sie ^ ins Schreibfeld tippen, wird
'DeskDebug' die Quelle-Datei-Verzeichnisse im übergeordneten Verzeichnis erwarten.
^.source bedeutet, dass dieses Verzeichnis ein Unter-Verzeichnis mit dem
Namen 'source' enthält, worin die Quellen-Datei-Verzeichnisse enthalten sind.
Parameter-Fenster

Ins Schreibfeld geben Sie den Pfadnamen der ausführbaren Datei ein, oder ziehen Sie die
Datei in dieses Fenster, und fügen Sie weitere Parameter hinzu. Wenn Sie eine Datei in dieses
Fenster ziehen, wird ihr Pfadname dem im Schreibfeld schon vorhandenen Text
hinzugefügt, so dass Sie auf diese Weise mehrere Pfadnamen eingeben können.
Klicken Sie auf 'Untersuch', um Untersuchung (Debug-Session) zu starten.
Klicken auf 'Abbruch' verwirft die Eingabe und schliesst das Fenster.
Klicken 'Beenden' Beendet das untersuchte Programm und 'DeskDebug' selbst.
In einigen Fällen müssen Sie diesen Eintrag zweimal klicken. Läuft noch ein
untersuchtes Programm, gilt auch das fürs Steuerfenster bei 'Beenden' Geschriebene.
Einstellungen-Fenster

Dieses Fenster bietet die Möglichkeit, dass die meisten Optionen beim Start von
DeskDebug gemäss den Wünschen des Benutzers eingestellt werden.
Die in der nachfolgenden Tabelle aufgeführten Rahmen enthalten Optionen,
die die gleichartigen Optionen in den daneben aufgeführten Fenstern oder Menüs
beim Start von 'DeskDebug' entsprechend setzen.
| Anzeigen |
Für jeden Eintrag des gleichnamigen Untermenus ist eine Option vorhanden. |
| Steuerung |
Die fünf Optionen entsprechen denjenigen im gleichnamigen Fenster. |
| Disassembler |
Diese Optionen beziehen sich aufs Fenster 'Disassembler-Optionen'. |
| Kontext | Diese beiden Optionen beziehen sich aufs gleichnamige Fenster. |
| Variablen-Anzeige-Grenzen |
Die drei umschaltbaren Anzeigen beziehen sich auf die gleichartigen
drei Anzeigen im Fenster 'Variablen-Optionen'. |
| Gleitpunkt-Zahlen |
Diese Optionen beziehen sich auf die gleichartigen Optionen, die im Fenster
'FPU-Register' bei dessen voller Grösse ganz unten sichtbar sind. |
Die beiden letzten Rahmen bieten besondere Möglichkeiten:
| Verschiedenes |
Fenster-Orte sichern | Sichert die Debugger-Fenster-Orte mit den Einstellungen. |
| Einstellungen in '!Boot' | Entscheidet, ob die Einstellungs-Datei ins
'!Boot'-Verzeichnis oder ins Anwendungs-Verzeichnis geschrieben werden soll. |
| Laden und anzeigen | Werk-Vorgaben |
Zum Laden und Anzeigen der Werk-Vorgaben |
| Wirksame Wahl | Zum Übernehmen und Anzeigen einer in den
erwähnten Fenstern vorgenommenen Wahl im Einstellungs-Fenster. |
Die beiden Knöpfe unten rechts ausserhalb der Rahmen haben folgende Wirkung:
'Abbruch' verwirft die getroffene Wahl und setzt auf die in der Datei gesicherte Wahl
zurück. 'Setzen und sichern' macht die neuen Einstellungen sofort wirksam und
sichert sie zudem als Datei.
Fehler-Behandlung
Ein im untersuchten Programm auftretender Fehler wird in einem offen bleibenden Fehlerfenster
gemeldet. Dabei erklingt ein Ton. Einzelschritte oder Fortsetzen des untersuchten Programmes
nach einem Fehler sind nicht möglich. In den meisten Fällen können jedoch alle
Anzeigen (Register, Speicher, Disassembler, Quelle-Listing, Symbol-Tabelle, Prozeduren-Liste
und Variablen-Liste) auch nach einem Fehler in vollem Umfange benutzt werden.
Im Fehlerfenster werden der Programmname, die Fehlernummer, die Auftritts-Adresse und diee
Fehlermeldung angezeigt. Sind die Auftritts-Adresse und die in der Fehlermeldung angegebene
Adresse unterschiedlich, soll man zuerst den Code an der Auftritts-Adresse betrachten.
Nur wenige fatale Fehler erzeugen später einen Folgefehler, der dies verunnmöglicht.
In solchen Fällen werden beide Fehler in je einer Wimp-Fehlerbox gemeldet und das untersuchte
Programm sofort beendet.
Bekannte Probleme
- 'DeskDebug' kann nur Dateien des Typs 'DebImage', aber nicht des Typs 'Absolute' untersuchen.
- 'DeskDebug' kann keine komprimierten (squeezed) Dateien lesen!
Jeder Versuch, eine solche Datei mit 'DeskDebug' zu untersuchen, erzeugt eine Fehlermeldung.
- 'DeskDebug' kann keine Programme durchschreiten, die in einem 'TaskWindow' laufen.
Jeder Versuch, ein in einem 'TaskWindow' laufendes Programm mit 'DeskDebug' zu unteruchen,
erzeugt eine entsprechende Fehlermeldung.
- Wenn Sie durch ein 'C'-Programm ohne jegliche Debug-Info schreiten wollen, müssen
Sie den Haltepunkt am Anfang der Prozedur 'main' von Hand setzen! Allerdings kann dann die
'Shared C Library' ihre Behandler nicht setzen, was zu Problemen führen kann.
- Einige SWIs und deren Parameter, die Redraw-Daten, der Quelle-Datei-Index und einige andere
Sachen werden im 'DeskDebug'-Arbeitsspeicher gehalten. Diese Bereiche haben feste Grössen.
Gegenwärtig gibt es keine Fehlerbehandlung beim Überlauf dieser Bereiche. Darum
kann es zu Problemen kommen, wenn ein Programm eine zu grosse Quelle-Datei hat oder zwischen zwei
Wimp-Poll-Aufrufen viele Wimp-SWIs aufruft.
- Wenn Sie durch ein Programm schreiten, achten Sie auf VDU-Befehle!
Wenn irgendwelche Mehr-Byte-VDU-Befehle auftauchen, setzen Sie bitte einen Haltepunkt hinter
den letzte Parameter-Schreib-Befehl, bevor der erste VDU-Befehl geschickt wird.
Dann klicken Sie 'Fortsetzen', damit der ganze VDU-Befehl in Echtzeit ausgeführt wird.
- Während eines der Fenster erneuert (redraw) wird, das dem untersuchten Programm
gehört, sollten Sie keine andern Fenster über dieses im 'Redraw'
befindliche Fenster hinweg bewegen! Sie werden so den Fenster-Inhalt 'löschen'!
Fenster-Inhalte werden nicht zwischengespeichert!
- Natürlich können Sie keine Fenster bewegen, die dem untersuchten Programm
gehören, während dieses an einem Haltepunkt oder nach einem Einzelschritt still
steht!
- Wenn das untersuchte Programm im Fenster des 'Task-Manager' einen roten Balken hat und nach
einem Haltepunkt oder Einzelschritt still steht, sollten Sie nur ganz kurz auf diesen roten
Balken oder hinter ihm klicken. Wenn Sie die Maustaste zu lange halten, wird der Balken grün!
- Wenn irgend ein Menu offen ist, sollten Sie die Maus nicht ausserhalb des Menus klicken!
Das schliesst das Menu. Um dies zu vermeiden, können sie die Befehle 'Einzelschritt'
mit [F5], 'Fortsetzen' mit [F6], 'Beenden' mit [F2], 'Übergehe Prozeduren'mit [F7]
und 'Quelle Schr.' mit [F8] auslösen.
Für diesen Zweck ist die 'Hot key'-Flagge gesetzt. Auch der Eingabe-Fokus im Steuerfenster
hilft hier weiter. Dieser kann mit [Ctrl+Tab] / [Shift+Ctrl+Tab] geholt werden.
- Wenn Sie einen Menu-Eintrag mit {Auswahl} oder {Spezial} klicken, wird das betreffende Menu
geschlossen, wenn der nächste Haltepunkt erreicht wird. Wenn Sie im Menu mit {Spezial}
geklickt haben, wird das Menu irgendwo auf dem Bildschirm wieder erscheinen, wenn das untersuchte
Programm das nöchste Mal selbst 'Wimp_Poll' aufruft.
Technische Einzelheiten
- Bei einem Haltepunkt oder nach einem Einzelschritt ruft 'DeskDebug' an Stelle des
untersuchten Programms Wimp_Poll auf. Wimp-Ereignisse und -Mitteilungen, die das untersuchte
Programm betreffen, werden in eine Warteliste gegeben. Ausnahmen: Das Null-Ereignis und die
Redraw-Aufforderung werden nicht behandelt, weil dies zu Endlos-Schleifen führen würde.
Tastendruck-Ereignisse gehen nicht in die Warteliste, weil dies nutzlos ist. Fenster-Redraws und
Updates werden emuliert. Jegliche vom Wimp erzeugte Mitteilungen (z.B. MenuWarning) gehen nicht
in die Warteliste, weil das Wimp sie immer wieder sendet. Die Mitteilung 'HelpRequest' geht nicht
in die Warteliste, weil die interaktive Hilfe-Anwendung sie wiederholt sendet. Um Aufrufe von
Wimp_Poll an Stelle des untersuchten Programmes von 'echten' Aufrufen durch das untersuchte
Programm unterscheiden zu können, benutzt 'DeskDebug' seine eigenen Vor- und Nach-Filter.
Um eine saubere Mitteilungs-Behandlung und -Bestätigung zu gewährleisten,
registriert 'DeskDebug' ein zusätzliches Nach-Filter für alle Aufgaben.
- Die SWIs DeleteWindow, OpenWindow, CloseWindow, DragBox, SetExtent, ForceRedraw, ProcessKey,
SetCaretPosition, CreateMenu und CreateSubMenu zwischen zwei Wimp_Poll oder Wimp_PollIdle
des untersuchten Programms werden abgefangen und in eine Warteliste gelegt.
'DeskDebug' führt sie in seinem Vorfilter aus, wenn das untersuchte Programm selbst
Wimp_Poll oder Wimp_PollIdle aufruft. Damit die SWIs GetWindowState, GetWindowInfo und
GetWindowOutline dennoch stets die richtigen Werte erhalten, werden beim Ausführen von
CreateWindow zusätzlich versteckte Fenster angelegt. Die SWIs DeleteWindow, OpenWindow,
CloseWindow und SetExtent werden jeweils auch mit diesen versteckten Fenstern ausgeführt.
Ruft das untersuchte Programm den SWI Wimp_SendMessage, wird dieser sofort so aufgerufen, dass
die Rückgabewerte in den Mitteilungs-Block gelangen, aber keine Mitteilung gesendet wird.
Die Mitteilung wird in eine getrennte Warteschlange gegeben, die abgearbeitet wird, wenn das
untersuchte Programm selbst Wimp_Poll oder Wimp_PollIdle aufruft.
- Um mit der Toolbox zusammen zu arbeiten, fängt 'DeskDebug' die
SWIs Filter_RegisterProFilter und Filter_RegisterPostFilter ab. 'DeskDebug' schreibt deren
Parameter in den eigenen Werkspeicher und ruft die Vor- und Nach-Filter der Toolbox von seinen
eigenen Vor- und Nach-Filtern aus auf. 'DeskDebug' behandelt die 'inneren' Toolbox-Mitteilungen
(&44EC0) korrekt, so dass Anwendungen, die die Toolbox benutzen, einwandfrei funktionieren.
- Weil die SWIs Wimp_AddMessages und Wimp_RemoveMessages bei aktiver Toolbox nicht
funktionieren, kopiert 'DeskDebug' die Mitteilungs-Liste des untersuchten Programmes, fügt
die eignen Mitteilungs-Nummern dazu und versorgt den SWI Toolbox_Initialise mit dem Zeiger auf
die neue Liste.
- Um mit dem ColourPicker zusammen zu arbeiten, fängt DeskDebug die SWIs Filter_RegisterProFilter
und Filter_RegisterPostFilter ab, während ColourPicker sein Fenster öffnet. DeskDebug
fängt die SWIs Filter_DeRegisterProFilter und Filter_DeRegisterPostFilter ab, wenn ColourPicker
sein Fenster schliesst. DeskDebug schreibt die Filter-Parameter in den eigenen Werkspeicher und
ruft die Vor- und Nach-Filter des ColourPicker von seinen eigenen Vor- und Nach-Filtern aus auf.
- Die Codefolgen für die 'untere Ebene' und den 'Erhaltungs-Code' und die
Bediener-Oberfläche von 'DeskDebug' sind zusammen in einem Modul, so dass ich alle Routinen
mit BL und ohne SWIs rufen kann.
- Das 'DeskDebug'-Modul stellt die zwei *Befehle 'DeskDebug_Enter' und 'DeskDebug_Start'
bereit. Sie sind nur für 'DeskDebug' selbst bestimmt. Benutzen Sie sie nicht!
- 'DeskDebug' verwendet folgende eigene Wimp-Mitteilungen:
&57580 = Öffne Register-Fenster; &57581 = Verstecke Register_Fenster;
&57582 = Zeige Sonder-Fenster (für Textausgaben ohne Wimp);
&57583 = Melde einen im untersuchten Programm aufgetretenen Fehler;
&57584 = Gib fremde Wimp-Mitteilung weiter (für die Warteliste);
&575A0 = Fortsetzen; &575A1 = Einzelschritt; &575A2 = Untersuchungs-Ende.
Die Mitteilungen &57580 bis &57584 kommen vom 'Erhaltungs-Code';
die Mitteilungen &575A0 bis &575A2 kommen von der Benutzer-Oberfläche.
- Der ganze 'DeskDebug' ist sorgfältig von Hand in ARM-Assembler-Sprache geschrieben worden.
Gegenwärtig umfasst er 15500 Assembler-Quelle-Zeilen. Ich entwickle 'DeskDebug' seit
ungefähr sieben Jahren. Viele Versuche waren nötig, und oft zweifelte ich am
Erfolg.
Würdigungen, Danksagungen und Bestätigungen
- Zuerst danke ich Gott im Himmel, der mir so gute geistige Fähigkeiten und gute Ideen
geschenkt hat, die mir ermöglichen, ein solch schwieriges Projekt wie diesen Debugger zu
entwickeln.
- Ich danke meinen Eltern, die mich in den vergangenen Jahren mit Geld unterstützten.
- Danke an Andreas Feldner, Eigner des 'Fliegende Schnecke' Software-Hauses in Deutschland,
der mir die Idee mitteilte, diesen Debugger zu entwickeln, und dass dabei Multitasking
möglich ist.
- Danke an Andrew Clower, der mir den Quelle-Code für 'Desktop Hacker' gegeben hat,
wovon ich den Disassembler und einige andere Codefolgen in 'DeskDebug' verwende.
- Danke an Alan Wrigley, den Urheber von 'Vigil', einem andern nützlichen
Debug-Werkzeug.
- Vielen Dank an David Ruck, der mir viel half und vielen guten Rat gab, ohne den ich diesen
Debugger nicht entwickeln könnte. Seine Geduld half mir bei der Überwindung vieler
Probleme.
- Danke auch an Martin Würthner, der 'DeskDebug' mit grossen Projekten testet und weiter
hilft.
- Zu guter Letzt gilt mein Dank Neil Spellings und Adrian Lees, die diesen Debugger noch weiter
testen, ihn veröffentlichen und verkaufen.
Weiss Niklaus 2007
|
|