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'