Debugging von Skripten in Software von RP Photonics
Die meisten unserer Softwareprodukte unterstützen eine leistungsfähige Skriptsprache, und die neuesten Versionen enthalten auch einen nützlichen Debugger:
- RP Fiber Power seit V7
- RP Resonator seit V4
- RP Coating seit V4
- RP ProPulse seit V4
Der Debugger kann sehr nützlich sein, wenn man in Skripten für raffinierte Simulationen Fehler sucht. Er kann auf zwei verschiedene Weisen verwendet werden:
- Sie können Skripte Kommando für Kommando ausführen.
- Sie können ebenfalls Debugging sogar innerhalb von mathematischen Ausdrücken betreiben. Dies ist wichtig, da unsere Software Ausdrücke erlaubt, die beispielsweise verschachtelte Kontrollstrukturen enthalten.
In jedem Fall können Sie den Zustand des Systems nach der Ausführung jedes Kommandos bzw. jedes Teils eines Ausdrucks genau inspizieren. Dadurch können Sie schnell herausfinden, in welchem Schritt etwas falsch lief. Oder sie finden zusätzliche quantitative Details Ihres Systems heraus, die vom Skript normalerweise nicht angezeigt würden.
Im Folgenden werden die beiden die Debugging-Methoden im Detail erklärt, womit auch demonstriert wird, wie gut ausgearbeitet das System ist.
Skripte Kommand für Kommando ausführen
Die Software kann sich in einem der folgenden Modi befinden:
- Editing mode: Sie können Skripte oder die Inhalte von Formularen editieren. Die Software führt momentan noch gar nichts aus.
- Running mode: Ein Skript wird momentan ausgeführt. Normalerweise werden Sie einfach warten, bis dies erledigt ist und die Resultate angezeigt werden.
- Debug mode: In diesem Modus hat die Software die Ausführung unterbrochen und wartet auf Ihre Entscheidung darüber, wie weiter verfahren werden soll. Sie zeigt die momentane Position im ausgeführten Skript an, und Sie können den Zustand des Systems inspizieren, bevor Sie über das weitere Vorgehen entscheiden – etwa, das nächste Kommando auszuführen, das Skript normal weiterlaufen zu lassen, oder die Ausführung abzubrechen.
Wenn Sie ein Skript ausführen lassen, wird die Software normalerweise vom Editing-Modus in den Running-Modus wechseln, und nach der Ausführung wieder zurück. Jedoch können Sie auf die folgenden Weisen in den Debug-Modus wechseln:
- Sie können direkt dorthin gelangen, indem sie die Ctrl-Taste gedrückt halten, während Sie die Ausführung beginnen (z. B. Ctrl-F8 statt F8).
- Im Running-Modus können Sie Ctrl-B drücken oder die “Break”-Schaltfläche auf dem Hauptfenster betätigen.
- Die Software geht ebenfalls in den Debug-Modus über, wenn bei der Ausführung ein Haltepunkt (breakpoint) im Code getroffen wird.
Hier sehen Sie das Hauptformular im Debug-Modus:
Unter dem Toolbar sehen Sie die Fläche “Execution and debugging” mit diversen Informationen:
- den Status “debug”
- den Namen des momentan ausgeführten Skripts
- die momentane Position im Code (ggf. mit nützlichen Zusatzinformationen über aktive Kontrollstrukturen)
- die gesamte Ausführungszeit
Es gibt diverse Schaltflächen, um die nächste Aktion zu bestimmen:
- Abort: Die Ausführung wird definitiv beendet, und die Software geht zurück in den Editing-Modus.
- Break: Damit können Sie während der Ausführung in den Debug-Modus wechseln. Das kann z. B. praktisch sein, wenn das Skript offenbar in eine Endlosschleife geraten ist.
- Single command: Es soll nur das nächste Kommando ausgeführt werden.
- Resume: Die Ausführung soll weiterlaufen, bis das Ende des Skripts oder der nächste Haltepunkt gefunden wird.
- Inspectors (Lupen-Symbol): Damit rufen Sie das Tool auf, mit dem Sie den momentanen Zustand des Systems inspizieren können.
Sie sehen ebenfalls die Anzeige des ausgeführten Codes; die nächste Codezeile ist blau hervorgehoben.
Haltepunkte (breakpoints) können auf zwei verschiedene Weisen gesetzt werden:
- Sie können einfach vor eine Code-Zeile im Editor klicken.
- In einem Skript kann eine Zeile mit “@” beginnen.
Beide Arten von Haltepunkten können auch konditional gemacht werden, so dass sie nur aktiv sind, wenn eine bestimmte Bedingung erfüllt ist.
Hier sehen Sie das Tool zum Inspizieren des Systemzustands:
Hier ist momentan der Reiter für die Anzeige der globalen Variablen aktiv; es gibt andere Reiter für das Inspizieren von Feldern und benutzerdefinierten Funktionen. Es kann zusätzliche Reiter mit Physik-spezifischen Details geben, z. B. in RP Fiber Power für die definierten Faser-Modelle und Details der numerischen Strahlpropagation.
Im unteren Bereich können Sie einen Ausdruck eingeben, dessen Resultat darunter angezeigt wird.
Debugging von Ausdrücken
Die Software kann auch komplexe Ausdrücke auswerten, die sogar verschachtelte Kontrollstrukturen enthalten können. Deswegen ist es oft sehr wünschenswert, Debugging auch innerhalb solcher Ausdrücke betreiben zu können.
Sie können Haltepunkte innerhalb eines Ausdrucks setzen – hier nicht mit dem “@”-Zeichen, sondern durch Funktionsaufrufe wie debug('message'). Wenn dies ausgeführt wird, wird die Software an dieser Stelle in den Debug-Modus gehen und die übertragene Nachricht anzeigen, die nützliche Informationen enthalten kann. Sie können später den Debug-Modus mit debug('') (oder auch manuell) wieder beenden. Der Debug-Modus wird ebenfalls beendet, wenn das Ende des Blocks erreicht wird, indem die debug()-Funktion aufgerufen wurde. Sie können also gezielt die Code-Teile untersuchen, die für Sie gerade von Interesse sind.
Das Konzept mit der debug()-Funktion anstelle eines einfachen Haltepunkt-Symbols wie “@” gibt Ihnen zusätzliche Flexibilität. Insbesondere können Sie die Funktion auch nur dann aufrufen, wenn eine bestimmte Bedingung erfüllt ist. Ebenfalls können Sie eine berechnete Meldung anzeigen, die Sie genauer über den momentanen Zustand informiert (etwa 'Iteration 17').
Wenn bei der Ausführung ein solcher Haltepunkt getroffen wird, zeigt die Software wieder das Tool zum Inspizieren an, aber diesmal mit dem zusätzlichen Reiter “Debug expression”:
Hier sehen Sie im Einzelnen:
- die Nachricht, die von der debug()-Funktion übermittelt wurde
- den Code (mit der blau gekennzeichneten aktuellen Position)
- die Schaltfläche “Next expression”: Ausführung des nächsten Ausdrucks
- die Schaltfläche “End debug mode”: Ausführung bis zum nächsten Haltepunkt (oder Ende des Blocks)
- die Schaltfläche “Abort”: Die Ausführung des Ausdrucks und des gesamten Skripts wird abgebrochen.
- die anderen Reiter für das Inspizieren von globalen Variablen, Feldern etc.
Es gibt diverse weitere nützliche Features und Tricks, die im Detail in der Dokumentation der Software erklärt werden.