Rexx - Debuggen
Das Debuggen ist eine wichtige Funktion in jeder Programmiersprache. Es hilft dem Entwickler, Fehler zu diagnostizieren, die Grundursache zu finden und sie dann entsprechend zu beheben. In Rexx wird das Trace-Dienstprogramm zum Debuggen verwendet. Der Trace-Befehl kann auf zwei Arten implementiert werden: der Batch-Modus und der interaktive Modus. Schauen wir uns an, wie beide Optionen implementiert werden.
Trace im Batch-Modus
Der Trace-Befehl wird verwendet, um eine detaillierte Ebene jedes ausgeführten Rexx-Befehls anzugeben.
Die allgemeine Syntax der Trace-Anweisung wird wie folgt angezeigt:
Syntax
trace [setting]
Wo die Einstellung eine der folgenden Optionen sein kann -
A - Verfolgt alle Befehle.
C - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet werden.
E - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
F - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
I - Dies bietet eine Zwischenverfolgung von Rexx-Befehlen auf mittlerer Ebene.
L - Diese Option ist verfügbar, wenn Sie die Ablaufverfolgung während des Vorgangs kennzeichnen möchten.
N - Dies ist die Standardoption, bei der keine Ablaufverfolgung erfolgt.
Schauen wir uns ein Beispiel für den Befehl trace an.
Beispiel
/* Main program */
trace A
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
Die Ausgabe des obigen Programms wird wie folgt sein:
5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
7 *-* say 'This is a whole number
This is a whole number
8 *-* return 0
An der Ausgabe können Sie erkennen, dass der Ausgabe des Programms eine zusätzliche Ablaufverfolgung hinzugefügt wurde. Die folgenden Dinge können über die Ausgabe bemerkt werden -
Die Zeilennummer wird zusammen mit der ausgeführten Anweisung zur Trace-Ausgabe hinzugefügt.
Jede Zeile, die ausgeführt wird, wird in der Trace-Ausgabe angezeigt.
Trace-Funktion
Trace kann auch mit Hilfe der Trace-Funktion aktiviert werden. Die allgemeine Syntax und das Beispiel sind unten aufgeführt.
Syntax
trace()
Die obige Funktion gibt den aktuellen Trace-Level zurück.
Parameter
Keiner
Rückgabewert
Die obige Funktion gibt den aktuellen Trace-Level an.
Beispiel
/* Main program */
say trace()
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number '
Die Ausgabe des obigen Programms ist wie folgt.
N
This is an incorrect number
Die erste Zeile von N zeigt an, dass die Kurve auf Normal gesetzt ist.
Trace-Wert einstellen
Der Trace-Level kann mit der Trace-Funktion eingestellt werden. Die allgemeine Syntax und das Beispiel sind unten aufgeführt.
Syntax
trace(travel_level)
Parameter
trace_level - Dies ähnelt den verfügbaren Optionen zum Einstellen der Ablaufverfolgungsstufe.
Rückgabewert
Die obige Funktion gibt den aktuellen Trace-Level an.
Beispiel
/* Main program */
say trace()
current_trace = trace('A')
say current_trace
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then
signal msg say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
Die Ausgabe des obigen Programms wird wie folgt sein:
N
4 *-* say current_trace
N
6 *-* n = 100.45
7 *-* if \ datatype( n, wholenumber ) then
8 *-* signal msg
12 *-* say 'This is an incorrect number'
'This is an incorrect number'
Interaktive Verfolgung
Bei der interaktiven Ablaufverfolgung wird die Ablaufverfolgung während der Programmausführung ausgeführt. Genau wie in einer IDE wie Visual Studio für .Net, in der Sie Haltepunkte hinzufügen und sehen können, wie jede Anweisung ausgeführt wird, können Sie auch hier das Programm sehen, während jede Codezeile ausgeführt wird.
Die allgemeine Syntax lautet wie folgt:
Syntax
trace ?options
Dabei sind die Optionen für den Trace-Befehl dieselben wie unten gezeigt.
A - Verfolgt alle Befehle
C - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet werden.
E - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
F - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
I - Dies bietet eine Zwischenverfolgung von Rexx-Befehlen auf mittlerer Ebene.
L - Diese Option ist verfügbar, wenn Sie die Ablaufverfolgung während des Vorgangs kennzeichnen möchten.
N - Dies ist die Standardoption, bei der keine Ablaufverfolgung erfolgt.
Schauen wir uns ein Beispiel für die Implementierung der aktiven Ablaufverfolgung an.
Beispiel
/* Main program */
trace ?A
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg : say 'This is an incorrect number'
Die Ausgabe des obigen Programms erfolgt wie im folgenden Programm gezeigt. Die Ablaufverfolgung stoppt in jeder Codezeile. Dann müssen Sie die Eingabetaste drücken, um zur nächsten Codezeile zu gelangen.
This is an incorrect number
+++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
5 *-* n = 100.45 if datatype( n, wholenumber ) then
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
6 *-* signal msg
10 *-* msg :
10 *-* say 'This is an incorrect number'