| Bellacosa Mainframe apresenta o Trace no REXX |
💣🧠 “TRACE ?R”: O SUPERPODER SECRETO DO REXX QUE TRANSFORMA DEBUG EM INVESTIGAÇÃO FORENSE 🧠💣
Quando um EXEC entra em colapso no z/OS… o verdadeiro programador não entra em pânico. Ele ativa o TRACE.
Existe um momento na vida de todo profissional Mainframe em que o EXEC começa a agir como entidade paranormal.
Você roda o REXX.
Ele:
- não dá ABEND,
- não retorna RC,
- não mostra erro,
- não funciona,
- e ainda imprime uma mensagem que parece saída de um ritual obscuro do ISPF.
Você olha para a tela.
A tela olha para você.
E naquele instante nasce a pergunta clássica:
“QUE DIABOS ESSE EXEC ESTÁ FAZENDO?”
É aí que entra uma das ferramentas mais poderosas já criadas no universo IBM:
⚡ TRACE ⚡
Mas este artigo não é apenas sobre TRACE.
É sobre:
- debugging profissional,
- tratamento de erros,
- SIGNAL,
- RC,
- traps,
- investigação de falhas,
- sobrevivência operacional,
- e a fina arte de impedir que um EXEC destrua sua sanidade mental às 03:17 da manhã em pleno fechamento bancário.
🏛️ O DIA EM QUE O REXX DECIDIU NÃO FALHAR
Uma das características mais bizarras — e ao mesmo tempo geniais — do REXX é:
Ele tenta NÃO te atrapalhar.
Isso parece bonito…
ATÉ VIRAR UM PESADELO.
Exemplo clássico:
/* REXX */
salario = 5000
bonus = 1200
total = salrio + bonus
say total
Você esperaria:
6200
Mas recebe:
SALRIO1200
Sim.
Porque:
-
salrionão existe, - o REXX assume o nome da variável,
- concatena tudo,
- e segue a vida como se nada tivesse acontecido.
O programa não explode.
O programa apenas:
- distorce a realidade,
- corrompe lógica,
- e abre um portal dimensional dentro do TSO.
🚨 SIGNAL ON NOVALUE — O “AIRBAG” DO REXX
Todo EXEC profissional deveria começar com:
Signal On Novalue
Sem isso:
- bugs silenciosos vivem entre nós.
Com isso:
- variáveis inexistentes são capturadas imediatamente.
🧪 Exemplo Profissional
/* REXX */
Signal On Novalue
nome = "BELLACOSA"
say sobrenome
exit 0
Novalue:
say "ERRO: Variavel nao inicializada!"
say "Linha:" sigl
say sourceline(sigl)
exit 20
Resultado:
ERRO: Variavel nao inicializada!
Linha: 5
say sobrenome
ABSOLUTAMENTE LINDO.
Você:
- identifica o erro,
- localiza a linha,
- entende o problema,
- salva horas de investigação.
🕵️ TRACE — O CSI DO MAINFRAME
Agora chegamos ao coração da magia.
Trace R
Essa instrução transforma o EXEC em um documentário criminal.
Você começa a enxergar:
- execução linha por linha,
- resultados intermediários,
- expressões,
- variáveis,
- comandos host,
- fluxo lógico.
🔥 Exemplo
/* REXX */
Trace R
a = 10
b = 20
c = a + b
say c
Saída típica:
>>> "a = 10"
>>> "b = 20"
>>> "c = a + b"
>>> "30"
30
Você literalmente vê o cérebro do EXEC funcionando.
👁️ TRACE ?R — O MODO MATRIX DO REXX
Agora prepare-se.
Porque existe algo ainda mais poderoso:
Trace ?R
O ? ativa:
DEBUG INTERATIVO
Sim.
INTERATIVO.
Em pleno ambiente Mainframe.
Tecnologia ancestral da IBM.
🤯 O QUE ISSO FAZ?
O EXEC:
- pausa em cada instrução,
- espera comandos,
- permite inspeção dinâmica.
Você pode:
- reexecutar linha,
- alterar variável,
- testar expressão,
- inspecionar ambiente,
- modificar comportamento em tempo real.
🧠 Exemplo
Trace ?R
x = 10
y = 30
z = x + y
say z
Durante execução você pode digitar:
say x
E o EXEC responde.
É praticamente um:
- debugger,
- shell,
- laboratório interativo,
- máquina do tempo operacional.
☢️ RC — O NÚMERO QUE DEFINE O DESTINO
No Mainframe existe um conceito sagrado:
RETURN CODE
A variável especial:
rc
contém o retorno do último comando host.
🎯 Exemplo
"LISTDS USER.INVALID.DATASET"
say rc
Se dataset não existir:
8
📜 Convenção clássica IBM
| RC | Significado |
|---|---|
| 0 | Sucesso |
| 4 | Warning |
| 8 | Problema provável |
| 12 | Falha séria |
| 16 | Caos crescente |
| 20 | O datacenter está pegando fogo |
(Ok… o último é interpretação emocional.)
💀 O ERRO MAIS COMUM DOS INICIANTES
Executar comando host…
e IGNORAR o RC.
Exemplo proibido em 37 países:
"ALLOC FI(TESTE) DA('ARQ.INEXISTENTE') SHR"
"EXECIO * DISKR TESTE"
Se ALLOC falhar:
- EXECIO também falha,
- mensagens ficam confusas,
- debugging vira arqueologia.
✅ Forma correta
"ALLOC FI(TESTE) DA('ARQ.INEXISTENTE') SHR"
If rc <> 0 Then Do
Say "Falha na alocacao!"
Exit 8
End
🧨 SIGNAL ON ERROR — O CAÇADOR DE DESASTRES
Outra arma essencial:
Signal On Error
Agora qualquer comando host com RC ruim:
- desvia execução,
- entra no trap,
- permite recovery.
🛡️ Exemplo corporativo
/* REXX */
Signal On Error
"DELETE USER.PROD.ARQ"
say "Arquivo removido"
exit 0
Error:
say "Falha no comando host"
say "RC =" rc
say "Linha =" sigl
exit 12
🧬 SIGL — A LINHA DO CRIME
A variável:
sigl
contém:
a linha onde o erro ocorreu.
Isso é ouro puro.
🧠 SOURCELINE() — A MEMÓRIA FOTOGRÁFICA DO EXEC
Você pode mostrar exatamente a linha problemática:
say sourceline(sigl)
Exemplo:
"DELETE USER.PROD.ARQ"
O EXEC literalmente aponta:
“FOI AQUI.”
🏴☠️ EASTER EGG MAINFRAME #1
Veteranos de REXX frequentemente usam:
Trace ?R
como se fosse um mini TSO dentro do próprio EXEC.
É quase um:
- “REXXCEPTION”,
- um EXEC rodando dentro do EXEC,
- enquanto você conversa com ele durante a execução.
🏴☠️ EASTER EGG MAINFRAME #2
Existe uma lenda antiga de operadores que:
- ativavam TRACE,
- esqueciam de desligar,
- geravam SYSOUT gigantesco,
- e enchiam spool JES2 inteiro.
Moral da história:
Trace O
também salva carreiras.
🏴☠️ EASTER EGG MAINFRAME #3
Programador Mainframe raiz não chama bug de bug.
Ele chama de:
- “anomalia operacional”,
- “comportamento inesperado”,
- “efeito colateral do ambiente”,
- ou:
“funciona em produção.”
⚙️ O VERDADEIRO ENSINAMENTO
Debugging não é apenas corrigir erros.
É:
- entender fluxo,
- prever falhas,
- construir resiliência,
- escrever automações seguras,
- proteger produção,
- facilitar manutenção futura.
🏛️ O MAINFRAME NÃO PERDOA DESCUIDO
Um EXEC mal escrito pode:
- apagar datasets,
- travar usuários,
- consumir spool,
- quebrar automações,
- causar RC cascata em batch,
- gerar incidentes gigantescos.
Por isso programadores experientes:
- validam RC,
- usam SIGNAL,
- usam TRACE,
- documentam tudo,
- tratam exceções.
🚀 CONCLUSÃO
REXX parece simples.
Mas por trás da simplicidade existe uma linguagem:
- elegante,
- introspectiva,
- extremamente poderosa,
- absurdamente avançada para sua época.
E quando você domina:
- TRACE,
- SIGNAL,
- RC,
- NOVALUE,
- SOURCELINE,
- SIGL,
você deixa de apenas “escrever scripts”.
Você começa a construir:
automações enterprise-grade dignas do universo z/OS.
Porque no fim…
o verdadeiro programador Mainframe não teme o erro.
Ele:
- captura,
- analisa,
- documenta,
- trata,
- e transforma caos operacional em engenharia confiável.
💙🖥️🚀
Sem comentários:
Enviar um comentário