Spellings.net store
Not currently logged in
Clouds logo
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:

Setting debug flag in ObjAMS

Wenn Sie CC benutzen:

Setting debug flag in !CC

Wenn Sie C++ benutzen:

Setting debug flag in C++

Und wenn Sie Ihr Projekt linken:

Setting debug flag in Linker

 

Eröffnen Ihrer Projekt-Untersuchung

  1. 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.
  2. 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.
  3. 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:

The DeskDebug control window

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

The DeskDebug contol 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

The DeskDebug search window

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

The DeskDebug  save window 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

The DeskDebug display menu 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

The DeskDebug ARM CPU registers window

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

The DeskDebug FPU registers window

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

The DeskDebug memory dump window

Es zeigt den Anwendungs-Arbeitsspeicher in hexadezimaler und textualer Form.

Klicken mit Menu in diesem Fenster öffnet das Speicherdump-Menu.

 

Disassembler-Fenster

The DeskDebug disassembler

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

The DeskDebug WIMP event window
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

The DeskDebug program context window

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

The DeskDebug breakpoints listing window
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

The DeskDebug source code listing window

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

The DeskDebug source files list window

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

 

Symbole-Fenster

The DeskDebug symbols list window

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

The DeskDebug variables list window

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

The DeskDebug procedures list window

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

The DeskDebug menu dump 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

The DeskDebug show memory location dialog 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

The DeskDebug disassembler 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.
Optionen Führt zum Disassembler-Optionen-Fenster.

 

Zeige Programm-Ort-Fenster

The DeskDebug show program location window

  • 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

The DeskDebug disassembler options dialog

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

The DeskDebug source listing 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

The DeskDebug breakpoints menu Setze Haltepunkt Führt zum Setze Haltepunkt-Fenster.
Tilge Haltepunkt Führt zum Tilge Haltepunkt-Fenster.
Setze Halt bei SWI Führt zum Setze Halt bei SWI-Fenster.
Tilge Halt bei SWI Führt zum Tilge Halt bei SWI-Fenster.

 

Setze Haltepunkt-Fenster

The DeskDebug new breakpoint dialog

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

The DeskDebug remove breakpoints menu 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

break on swi set window

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

remove halt on SWI window 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

The DeskDebug symbol table 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

The DeskDebug variables list 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

The DeskDebug variable list options window

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

The DeskDebug program icon 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.
The DeskDebug icon bar menu 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

The DeskDebug source path entry window

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

The DeskDebug debugging parameters entry window

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

The DeskDebug choices window

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'.
KontextDiese 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 sichernSichert 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 anzeigenWerk-Vorgaben Zum Laden und Anzeigen der Werk-Vorgaben
Wirksame WahlZum Ü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

The DeskDebug error window

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