Mostrar mensagens com a etiqueta compilação. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta compilação. Mostrar todas as mensagens

terça-feira, 30 de dezembro de 2025

🧨 ABEND em Mainframe não é azar

 


🧨 ABEND em Mainframe não é azar

Como usar PARMs de compilação COBOL para caçar bugs no IBM Mainframe

Se você trabalha com COBOL em mainframe há mais de cinco minutos, já entendeu uma verdade universal:

❝ Programa não “cai”. Ele denuncia. ❞

E essa denúncia atende pelo nome de ABEND.

Neste artigo, vamos juntar tudo o que falamos até agora sobre bugs, ABENDs e parâmetros de compilação, para transformar você — humilde padawan — em alguém que olha um S0C7 e sorri, porque já sabe onde mexer.


🧠 A mentalidade correta: detectar → diagnosticar → eliminar

Antes de falar de PARM, ajuste o mindset.

No mundo IBM mainframe:

  • Detectar → perceber que algo deu errado
  • Diagnosticar → entender onde e por quê
  • Eliminar → corrigir sem criar outro monstro

Os parâmetros de compilação COBOL existem exatamente para acelerar o diagnóstico. Sem eles, você está debugando no escuro.



🧰 O arsenal do compilador COBOL

Quando você compila um programa COBOL no JCL, você pode pedir ajuda ao compilador usando PARMs.

Exemplo clássico:

//COBOL   EXEC IGYCRCTL,
 // PARM='LIST,MAP,OFFSET,SSRANGE,ARITH(EXTEND)' 

Isso não é excesso. Isso é sobrevivência profissional.


🗺️ MAP — o raio-X da memória COBOL

Vamos falar do MAP, porque ele é campeão de prova e de vida real.

O que o MAP faz?

  • Mostra o layout real da WORKING-STORAGE
  • Exibe offsets, tamanhos e alinhamento
  • Revela quem está sobrescrevendo quem

Quando usar MAP?

  • S0C7 (campo não numérico)
  • S0C4 (acesso indevido à memória)
  • Valores “malucos” após MOVE
  • Campos COMP / COMP-3 se comportando estranho

🧙♂️ Regra Jedi:

Se o valor não faz sentido, MAP revela o crime.

🧨 SSRANGE — o salva-vidas das tabelas

Se o seu programa usa:

  • OCCURS
  • Índices
  • Subscritos
  • Arrays

👉 SSRANGE não é opcional.

O que o SSRANGE faz?

  • Interrompe o programa no exato momento
  • Detecta acesso fora dos limites da tabela
  • Evita corrupção silenciosa de memória

Sem SSRANGE:

  • O erro acontece
  • O programa continua
  • O ABEND aparece 300 linhas depois
  • Você sofre


🧮 ARITH(EXTEND) — contra o overflow silencioso

O COBOL antigo adorava truncar valores sem avisar.

Com ARITH(EXTEND):

  • O compilador respeita precisão
  • Evita S0CB (overflow)
  • Resultados financeiros ficam corretos

📌 Essencial para:

  • COMPUTE
  • Cálculos financeiros
  • COMP e COMP-3


📜 LIST e OFFSET — o mapa do tesouro

LIST

  • Gera o listing completo
  • Mostra warnings, erros, mensagens
  • Fundamental para erros de arquivo (U4038, U4094)

OFFSET

  • Mostra deslocamento de cada instrução
  • Permite cruzar:

🧠 Dica de veterano:

Dump sem OFFSET é igual mapa sem legenda.

🐞 TEST — o modo “cirurgia aberta”

O parâmetro TEST habilita:

  • IBM z/OS Debugger
  • Breakpoints
  • Step by step
  • Inspeção de variáveis em tempo real

⚠️ Regra sagrada:

TEST nunca vai para produção.

Mas em desenvolvimento? 👉 É simplesmente o melhor amigo do padawan.


📊 Tabela definitiva — ABEND → PARM ideal

(sim, isso cai em prova)

Article content

ABEND / SintomaUse este PARMS0C7MAPS0C4SSRANGE + MAPOverflowARITH(EXTEND)Problema de arquivoLISTTabela / OCCURSSSRANGEDebug interativoTEST


🧪 Combo campeão (decora isso)

LIST, MAP, OFFSET, SSRANGE, ARITH(EXTEND)

Esse combo:

  • Resolve 80% dos ABENDs comuns
  • É aceito em ambientes de desenvolvimento
  • Te transforma em alguém respeitado na squad


🎓 Estilo prova IBM — frase mágica

❝ Qual parâmetro ajuda a identificar campos sobrepostos na memória? ❞

Resposta automática: 👉 MAP


🧠 Combo campeão de PROVA (decorar)

S0C7  → MAP
S0C4  → SSRANGE
Overflow → ARITH(EXTEND)
Arquivo → LIST
Tabela → SSRANGE + MAP

📊 Tabela “ABEND → PARM ideal”

Guia de sobrevivência COBOL Mainframe (estilo prova IBM)

Regra de ouro de prova: 👉 ABEND ≠ erro aleatório 👉 Sempre existe um PARM que entrega o criminoso

🧨 ABENDs de DADOS (os mais comuns)

ABENDO que aconteceuPARM IDEALPor quêS0C7Campo não numérico em operação aritméticaMAP, NUMPROC(MIG), LISTMAP mostra o campo corrompidoS0CBOverflow aritméticoARITH(EXTEND), LISTEvita truncamento silenciosoS0C1Instrução inválidaOFFSET, LISTOFFSET cruza dump × código


🧠 ABENDs de MEMÓRIA / ENDEREÇO

ABENDO que aconteceuPARM IDEALPor quêS0C4Acesso fora de área válidaSSRANGE, MAP, OFFSETSSRANGE pega o erro na horaS0C2Endereço inválidoOFFSET, MAPOffset aponta instrução culpada

🧠 Dica de prova:

Se envolver tabela, OCCURS ou índice, pense primeiro em SSRANGE.

📂 ABENDs de ARQUIVO / I-O

ABENDO que aconteceuPARM IDEALPor quêU4038OPEN/CLOSE erradoLISTMensagens aparecem no listingU4094READ inválidoLIST, MAPErro lógico, não de memóriaS013 / S213DCB / espaçoLISTDiagnóstico está no compile/list


🔄 ABENDs de LOOP / LÓGICA

SintomaCausaPARM IDEALPor quêLoop infinitoContador corrompidoTRUNC(BIN), MAPCOMP mal definidoValor estranho em COMPTruncamentoTRUNC(BIN)Controle binário correto


🧪 ABENDs “NÃO REPRODUZÍVEIS” (os traiçoeiros)

SintomaSuspeitoPARM IDEALPor quêErro intermitenteDados sobrepostosSSRANGE, MAPDetecta overwriteFunciona às vezesMOVE erradoMAP, FLAG(I)FLAG denuncia práticas ruins


🐞 ABENDs para DEBUG INTERATIVO

SituaçãoPARM IDEALUsoAnálise passo a passoTESTIBM z/OS DebuggerBreakpointsTESTDebug onlineCódigo grandeXREFLocalizar variáveis

⚠️ Prova e vida real:

TEST nunca entra em produção.

🧠 Checklist Bellacosa antes de debugar

✅ Compilou com LIST?

✅ MAP está ativo?

✅ SSRANGE ligado?

✅ Sabes qual ABEND estás caçando?

✅ Não levou TEST para PROD?

☠️ ABENDs clássicos e o parâmetro certo

Article content

ABENDCausa comumParâmetro salvadorS0C7Campo não numéricoMAP, NUMPROCS0C4Acesso inválidoSSRANGES0CBOverflowARITHU4038OPEN/CLOSELISTU4094Arquivo erradoLIST, MAP

🧙♂️ Conclusão El Jefe

ABEND não é castigo. É feedback brutalmente honesto.

Quem domina PARMs de compilação COBOL:

  • Debuga mais rápido
  • Sofre menos
  • Aprende mais
  • E vira referência no time

E lembre-se, padawan:

❝ O compilador sempre tentou te avisar. Você é que não pediu ajuda. ❞