Tracing

Aus C64-Wiki
(Weitergeleitet von Debugging)
Zur Navigation springenZur Suche springen

Für die dynamische Untersuchung eines Programms und dessen Funktionsweise, aber auch zur Fehlersuche helfen Tracing-Tools bzw. Debugger, indem diese den Programmlauf protokollieren bzw. interaktiv darstellen.

Tracing bezeichnet dabei den Vorgang des schrittweisen Abarbeiten eines Programms; wird das von einem Tool umgesetzt, das noch weitere Funktionalitäten wie das Anzeigen von Zusatzinformationen (CPU-Register, Speicherstelleninhalte, Variablen, Parameter und Rückgabedaten) mitbringt, spricht man von einem Debugger. Wird in erster Linie die Häufigkeit des Aufrufs einer Funktion oder einer Programmzeile bzw. die Dauer für ihre Abarbeitung erfasst (insbesondere um zu erkennen, an welchen Stellen das Programm besonders lange braucht bzw. wo Optimierungspotenzial besteht), spricht man eher von Profiling.[1]

Einsatzgebiete[Bearbeiten | Quelltext bearbeiten]

Tracing-Werkzeuge gibt es oft für interpretierende Hochsprachen wie beispielsweise BASIC oder Forth, aber auch auf Maschinenspracheebene. Für letztere stellen Maschinensprachemonitore häufig entsprechende Funktionen zur Verfügung. Für Tracing bieten sich auch Emulatoren an, die oft mit entsprechenden Funktionen aufwarten können. Hier können auf einem Host-System 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.

Maschinensprache-Debugger bieten häufig Single-Stepping, also das schrittweise Abarbeiten einzelner Instruktionen, sowie Breakpoints, also das Anhalten der Ausführung beim Erreichen ausgezeichneter Stellen im Programm. Der Debugger kann diese Techniken z.B. durch Patchen von Instruktionen umsetzen, um einen Software-Interrupt (etwa auf BRK-Basis) hervorzurufen.
Da die 65xx-CPU-Familie über keinen ausgewiesenen Trace-Modus verfügt, wird für die Single-Step-Funktion häufig (z.B. von SMON) mit dem Trick gearbeitet, 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[2] 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)[3] 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[4] VICE-Team
volksFORTH Forth Singe-Step-Tracer-Debugging-Tool als Bibliothek Forth-Gesellschaft e.V.

Referenzen[Bearbeiten | Quelltext bearbeiten]