Rexx - Depuração

A depuração é um recurso importante em qualquer linguagem de programação. Ajuda o desenvolvedor a diagnosticar erros, encontrar a causa raiz e resolvê-los de acordo. No Rexx, o utilitário de rastreamento é usado para depuração. A instrução de rastreamento pode ser implementada de 2 maneiras, uma é o modo em lote e a outra é o modo interativo. Vejamos como implementar as duas opções.

Rastrear em modo de lote

O comando trace é usado para fornecer um nível detalhado de cada comando Rexx que é executado.

A sintaxe geral da instrução trace é mostrada a seguir -

Sintaxe

trace [setting]

Onde a configuração pode ser qualquer uma das seguintes opções -

  • A - Rastreia todos os comandos.

  • C - Apenas rastreia os comandos do host que são enviados ao sistema operacional.

  • E - Apenas rastreia os comandos do host que são enviados ao sistema operacional e que resultaram em um erro.

  • F - Apenas rastreia os comandos do host que são enviados ao sistema operacional e que resultaram em uma falha.

  • I - Isso fornece um rastreamento de nível intermediário dos comandos Rexx.

  • L - Esta opção é se você deseja rotular o rastreamento conforme ele acontece.

  • N - Esta é a opção padrão em que nenhum rastreamento acontece.

Vamos dar uma olhada em um exemplo do comando trace.

Exemplo

/* 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 '

O resultado do programa acima será o seguinte -

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

Na saída, você pode ver que um rastreio adicional foi adicionado à saída do programa. As seguintes coisas podem ser observadas sobre a saída -

  • O número da linha junto com a instrução executada é adicionado à saída do rastreamento.

  • Cada linha executada é mostrada na saída do rastreamento.

Função Trace

O rastreamento também pode ser ativado com a ajuda da função de rastreamento. A sintaxe geral e o exemplo são mostrados abaixo.

Sintaxe

trace()

A função acima retorna o nível de rastreamento atual.

Parâmetros

Nenhum

Valor de retorno

A função acima fornece o nível de rastreamento atual.

Exemplo

/* 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 '

A saída do programa acima será a seguinte.

N 
This is an incorrect number

A primeira linha de N indica que o traço está definido como Normal.

Definir valor de rastreamento

O nível de rastreamento pode ser definido com a função de rastreamento. A sintaxe geral e o exemplo são mostrados abaixo.

Sintaxe

trace(travel_level)

Parâmetros

  • trace_level - Isso é semelhante às opções disponíveis para definir o nível de rastreamento.

Valor de retorno

A função acima fornece o nível de rastreamento atual.

Exemplo

/* 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 '

O resultado do programa acima será o seguinte -

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'

Traçado interativo

O rastreamento interativo é aquele em que o rastreamento é realizado conforme o programa é executado. Assim como em um IDE como o Visual Studio for .Net, no qual você pode adicionar pontos de interrupção e ver como cada instrução é executada, da mesma forma aqui você também pode ver o programa conforme cada linha de código é executada.

A sintaxe geral é a seguinte -

Sintaxe

trace ?options

Onde, as opções são as mesmas para o comando trace, conforme mostrado abaixo.

  • A - Rastreia todos os comandos

  • C - Apenas rastreia os comandos do host que são enviados ao sistema operacional.

  • E - Apenas rastreia os comandos do host que são enviados ao sistema operacional e que resultaram em um erro.

  • F - Apenas rastreia os comandos do host que são enviados ao sistema operacional e que resultaram em uma falha.

  • I - Isso fornece um rastreamento de nível intermediário dos comandos Rexx.

  • L - Esta opção é se você deseja rotular o rastreamento conforme ele acontece.

  • N - Esta é a opção padrão em que nenhum rastreamento acontece.

Vamos dar uma olhada em um exemplo de implementação de rastreamento ativo.

Exemplo

/* 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'

A saída do programa acima será conforme mostrado no programa a seguir. O rastreamento irá parar em cada linha de código; então você precisa pressionar o botão Enter para mover para a próxima linha de código.

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'