Programmanimation - Program animation

Programmanimation oder Stepping bezieht sich auf die mittlerweile weit verbreitete Debugging- Methode zum Ausführen von Code "zeilenweise". Der Programmierer kann den Status des Programms, der Maschine und der zugehörigen Daten vor und nach der Ausführung einer bestimmten Codezeile untersuchen. Dies ermöglicht eine isolierte Bewertung der Auswirkungen dieser Anweisung oder Anweisung und erhält dadurch einen Einblick in das Verhalten (oder Fehlverhalten) des ausführenden Programms. Nahezu alle modernen IDEs und Debugger unterstützen diesen Ausführungsmodus. Einige Testtools ermöglichen die schrittweise Ausführung von Programmen, entweder auf Quellcode- oder auf Maschinencodeebene, abhängig von der Verfügbarkeit der zur Kompilierungszeit gesammelten Daten .

Geschichte

System / 360 (Modell 65) Bedienerkonsole , mit Registerwert Lampen und Kippschalter und Tasten (Bildmitte).

Instruction Stepping oder einzelner Zyklus auch für die damit verbundene, weitere mikroskopische bezeichnet, aber jetzt veraltet Methode der Debugging - Code durch den Prozessor zu stoppen Takt und manuell einen Zyklus zu einer Zeit voran. Damit dies möglich ist, sind drei Dinge erforderlich:

  • Eine Steuerung, mit der die Uhr gestoppt werden kann (z. B. eine "Stop" -Taste).
  • Eine zweite Steuerung, mit der die gestoppte Uhr manuell um einen Zyklus vorgerückt werden kann (z. B. ein "Anweisungsschritt" -Schalter und eine "Start" -Taste).
  • Einige Mittel zum Aufzeichnen des Zustands des Prozessors nach jedem Zyklus (z. B. Register- und Speicheranzeigen).

Bei der 1964 angekündigten IBM System 360- Prozessorserie wurden diese Funktionen durch Schalter, Tasten und Neonlichtbänke auf der Vorderseite bereitgestellt.

Andere Systeme wie das PDP-11 boten ähnliche Funktionen, auch bei einigen Modellen. Die genaue Konfiguration war ebenfalls modellabhängig. Aufgrund von Überlegungen zur Kühlung wäre es nicht einfach, solche Einrichtungen auf LSI- Prozessoren wie den Intel x86- und Pentium- Leitungen bereitzustellen .

Als Multiprozessing mehr alltäglich geworden ist , müssten solche Techniken beschränkt Praktikabilität, da viele unabhängige Prozesse gleichzeitig gestoppt werden würde. Dies führte zur Entwicklung proprietärer Software von mehreren unabhängigen Anbietern, die ähnliche Funktionen bereitstellten, jedoch absichtlich Haltepunkte und Anweisungen für bestimmte Anwendungsprogramme in bestimmten Adressräumen und Threads einschränkten . Der Programmstatus (der für die ausgewählte Anwendung / den ausgewählten Thread gilt) wurde bei jedem Schritt zur Prüfung gespeichert und vor der Wiederaufnahme wiederhergestellt, wodurch der Eindruck einer einzelnen Benutzerumgebung erweckt wurde. Dies ist normalerweise ausreichend, um Probleme auf der Anwendungsebene zu diagnostizieren.

Anstatt eine physische Stopptaste zu verwenden, um die Ausführung anzuhalten - um dann mit dem Durchlaufen des Anwendungsprogramms zu beginnen, muss normalerweise vorher ein Haltepunkt oder eine "Pause" -Anforderung gesetzt werden, normalerweise an einer bestimmten Anweisung / Anweisung im Programm (vorher ausgewählt oder alternativ von Standard bei der ersten Anweisung).

Um eine Vollbild- "Animation" eines Programms bereitzustellen, ist normalerweise ein geeignetes E / A-Gerät wie ein Videomonitor erforderlich, das einen vernünftigen Abschnitt des Codes (z. B. in zerlegtem Maschinencode oder Quellcodeformat ) anzeigen und bereitstellen kann ein Zeiger (zB <==) auf die aktuelle Anweisung oder Zeile des Quellcodes. Aus diesem Grund musste die weit verbreitete Verwendung dieser Vollbildanimatoren in der Mainframe- Welt auf die Einführung von Transaktionsverarbeitungssystemen wie CICS in den frühen 1970er Jahren warten und beschränkte sich zunächst auf das Debuggen von Anwendungsprogrammen, die in dieser Umgebung ausgeführt wurden. Spätere Versionen derselben Produkte ermöglichten die bereichsübergreifende Überwachung / das Debuggen von Batch-Programmen und anderen Betriebssystemen und Plattformen.

Mit der viel späteren Einführung von Personalcomputern ab etwa 1980 konnten integrierte Debugger stärker in diese Einzelbenutzerdomäne integriert werden und lieferten ähnliche Animationen, indem der Benutzerbildschirm aufgeteilt und eine Debugging- "Konsole" hinzugefügt wurde, um die Programmiererinteraktion zu ermöglichen.

Borland Turbo Debugger war ein eigenständiges Produkt, das 1989 eingeführt wurde und eine Vollbild-Programmanimation für PCs bereitstellte. In späteren Versionen wurde die Unterstützung für das Kombinieren der Animation mit tatsächlichen Quellzeilen hinzugefügt, die zur Kompilierungszeit extrahiert wurden.

Techniken zur Programmanimation

Es gibt mindestens drei verschiedene Softwaretechniken zum Erstellen von "Animationen" während einer Programmausführung.

  • Bei der Instrumentierung wird dem Programm zur Kompilierungszeit zusätzlicher Quellcode hinzugefügt, um den Animator vor oder nach jeder Anweisung aufzurufen und die normale Ausführung anzuhalten. Wenn es sich bei dem zu animierenden Programm um einen interpretierten Typ handelt, z. B. Bytecode oder CIL, verwendet der Interpreter (oder IDE- Code) seinen eigenen integrierten Code, um den Zielcode zu umschließen.
  • Induzierter Interrupt Diese Technik beinhaltet das Erzwingen eines Haltepunkts an bestimmten Punkten in einem Programm zur Ausführungszeit, normalerweise durch Ändern der Maschinencode-Anweisung an diesem Punkt (dies kann ein eingefügter Systemaufruf oder eine absichtlich ungültige Operation sein) und Warten auf einen Interrupt. Wenn der Interrupt auftritt, wird er vom Testtool verarbeitet, um den Status an den Programmierer zurückzumelden. Diese Methode ermöglicht die Programmausführung mit voller Geschwindigkeit (bis der Interrupt auftritt), hat jedoch den Nachteil, dass die meisten Anweisungen, die zum Interrupt führen, nicht vom Tool überwacht werden.
  • Befehlssatzsimulator Diese Technik behandelt den Maschinencode des kompilierten Programmsals eingegebene 'Daten' und simuliert die Anweisungen des Host-Computers vollständig, überwacht den Code auf bedingte oder bedingungslose Haltepunkte oder vom Programmierer angeforderte "Einzelzyklus" -Animationsanforderungen zwischen jedem Schritt.

Methodenvergleich

Der Vorteil der letzten Methode besteht darin, dass keine Änderungen am kompilierten Programm zur Bereitstellung der Diagnose vorgenommen werden und nahezu unbegrenzte Möglichkeiten für eine umfassende Diagnose bestehen, da das Tool die Diagnose des Hostsystems um zusätzliche Software-Tracing-Funktionen erweitern kann. Mit dieser Technik können auch viele Programmfehler automatisch diagnostiziert (und verhindert) werden, einschließlich Speicherverletzungen und Pufferüberläufen . Die Schleifenerkennung ist auch über die automatische Befehlsverfolgung zusammen mit den Schwellenwerten für die Befehlsanzahl möglich (z. B. Pause nach 10.000 Befehlen; Anzeige der letzten n Befehle). Die zweite Methode ändert nur den Befehl, der vor seiner Ausführung angehalten wird, und kann ihn dann auch vor der optionalen Wiederaufnahme durch wiederherstellen der Programmierer. Einige Animatoren erlauben optional die Verwendung von mehr als einer Methode, abhängig von den Anforderungen. Verwenden Sie beispielsweise Methode 2, um einen bestimmten Punkt mit voller Geschwindigkeit auszuführen, und verwenden Sie anschließend die Befehlssatzsimulation.

Zusatzfunktionen

Der Animator kann andere darin enthaltene Test- / Debugging-Funktionen wie Programmablaufverfolgung , Speicherauszug , bedingte Haltepunkt- und Speicheränderung , Programmflussänderung , Codeabdeckungsanalyse , "Hot Spot" -Erkennung, Schleifenerkennung oder ähnliches kombinieren oder nicht .

Beispiele für Programmanimatoren

(Datum der ersten Freigabe)

Externe Links und Referenzen