Tracing

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Für die dynamische Untersuchung eines Programms und dessen Funktionsweise, aber auch zur Fehlersuche (Debugging) helfen Tracing-Tools, indem diese den Programmlauf anhand von passierten Einsprungpunkten protokollieren, aufzeichnen oder laufend darstellen. Entweder kann man während des Programmlaufs die Stelle der Programmabarbeitung und Zusatzinformationen (CPU-Register, Speicherstelleninhalte, Variablen, Parameter und Rückgabedaten) anzeigen oder die Häufigkeit des Aufrufs erfassen (was in allerdings schon mehr in Richtung Profiling geht).

Einsatzgebiete[Bearbeiten | Quelltext bearbeiten]

Solche Werkzeuge gibt es oft für interpretierende Hochsprachen wie beispielsweise BASIC, Forth aber auch auf Maschinenspracheebene. Für letztere stellen so manche Maschinensprachemonitore entsprechende Funktionen zur Verfügung.
Besonders geeignet für solche Analysen sind natürlich auch Emulatoren, die hier oft mit entsprechenden Funktionen aufwarten können. Hier können auf einem Host-System auch umfangreiche Tracing-Daten einfach verarbeitet und gespeichert werden.

BASIC-Erweiterungen bieten eine Trace-Funktion häufig mit dem Schlüsselwort TRACE (z. B. von Simons' Basic), womit die Abarbeitung des Interpreters in einen Trace-Modus versetzt werden kann. In diesem Trace-Modus werden dann Zusatzinformationen, wie etwa die aktuelle Zeilennummer oder Variablen am Schirm angezeigt, was zum einen die Ausgabe stört und manchmal auch den Programmfluss verlangsamen kann oder von Tastatureingaben abhängig macht.

Bei Maschinensprache hat man oft nur ein Single-Stepping, also das schrittweise abarbeiten einzelne Instruktionen oder das Aufzeichnen oder registrieren von Einsprungpunkten über sogenannte Hooks in Sprungleisten (bei Vektoren) oder durch Patchen von Instruktionen, um einen Software-Interrupt (etwa auf BRK-Basis) hervorzurufen.
Da die 65xx-CPU-Familie über keinen ausgewiesenen Trace-Modus verfügt, arbeiten Monitore, wie etwa SMON für die Singe-Step-Funktion mit dem Trick, einen CIA-Timer-Interrupt mitten in der Instruktion (die minimal 2 Takte haben kann) "zünden" zu lassen (der Timer-Wert wird hier entsprechend genau bemessen). Die Instruktion wird dann noch abgearbeitet, aber sofort im Anschluss löst der Interrupt aus und die Kontrolle kann wieder der Monitor an sich reißen und so den Status unmittelbar nach der Instruktion erfassen und darstellen. Dieses Verfahren funktioniert auch im ROM.
Wenn man gewisse Haltepunkte oder Einsprungpunkte "registrieren" möchte (etwa die Häufigkeit der Aufrufe oder mit dem Eintreten bestimmter Bedingungen anhalten möchte), muss man mit Hooks und Patches arbeiten, die den bestehenden Code überschreiben. Beim C64 hat man die Möglichkeit das KERNAL- oder BASIC-ROM ins RAM zu verlagern und so den Code zu manipulieren. Sonst hat man nur die Möglichkeit über im RAM abgelegte Vektoren definierte Funktionen abzufangen.


Implementierungen[Bearbeiten | Quelltext bearbeiten]

Name Umgebung Funktion Autor
BASIC 3.5
BASIC 7.0
BASIC TRON/TROFF-Kommando aktiviert/deaktivert Trace-Modus Commodore
C64 Forth/79 Forth Trace-Modus für den Inner-Interpreter Greg Harris, Performance Micro Products
Final Cartridge 3 BASIC TRACE-Kommando aktiviert/deaktivert Trace-Modus Modulhersteller
Help Plus BASIC #s-Kommando für Single-Step, #t/#e-Kommando aktiviert/deaktivert Trace-Modus Print-Technik
IO Monitor[1] Maschinensprache Protokolliert KERNAL-I/O-Calls samt Parameter und Rückgabewerte in einem Puffer und kann diesen dann auswerten bzw. anzeigen.
(Puffer von $8000 bis $9FFF)
Dave Van Wagner
Simons' Basic BASIC TRACE-Kommando aktiviert/deaktivert Trace-Modus David Simons
SMON Maschinensprache Monitorbefehl TW (Trace Walk) ermöglicht Single-Stepping 64'er Magazin, Feb. 1985
TSB BASIC TRACE-Kommando aktiviert/deaktivert Trace-Modus Arndt Dettke
Jamaicamon (Jammon)[2] Maschinensprache Single-Step mit Kommando "z" mit alternativem Darstellungsmodus.
Monitor für den Native-Modus einer 65816-CPU, z. B. für SuperCPU oder mit Anpassung auch andere 65816-Turbokarten
Stephen L. Judd
VICE-Monitor Maschinensprache
(Emulator)
Monitorbefehle step (z) und next (n) für Single-Stepping, trace (tr) mit Tracing an bestimmten Adressen oder Adressbereichen, siehe auch VICE#Debugging[3] VICE-Team
volksFORTH Forth Singe-Step-Tracer-Debugging-Tool als Bibliothek Forth-Gesellschaft e.V.

Referenzen[Bearbeiten | Quelltext bearbeiten]