☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta SYSMDUMP. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta SYSMDUMP. Mostrar todas as mensagens

sexta-feira, 27 de março de 2026

🔥 COBOL NÃO QUEBROU… FOI O RTM QUE DECIDIU O DESTINO

 

Bellacosa Mainframe explica rtm o grande guarda-costas.

🔥 COBOL NÃO QUEBROU… FOI O RTM QUE DECIDIU O DESTINO

Se você trabalha com COBOL há anos, já viu isso acontecer:

💥 S0C7
💥 S0C4
💥 S878
…e aquele silêncio constrangedor no batch.

E aí vem a pergunta clássica:

👉 “O que aconteceu?”

Errado.

A pergunta certa é:

🧠 “O que o z/OS fez quando isso aconteceu?”

Porque no exato momento do ABEND…
quem assume o controle não é o seu programa.

É o RTM — Recovery Termination Manager.


🧠 O RTM: o juiz invisível do seu programa

O RTM é um componente do z/OS que entra em ação sempre que algo relevante acontece:

  • ✔️ Erro
  • ✔️ Falha
  • ✔️ Terminação normal (sim!)

👉 Ele é responsável por:

  • Capturar o erro
  • Tentar recuperar
  • Decidir o destino
  • Registrar tudo

💡 Tradução Bellacosa:

🔥 “O RTM é quem decide se seu programa vive… ou vira dump.”


🚨 Quando o ABEND acontece (o bastidor real)

Você vê:

S0C7 – erro de dados

O RTM vê:

  • Tipo de exceção
  • Estado da CPU (PSW)
  • Registradores
  • Control blocks
  • Contexto da task

👉 E imediatamente inicia o fluxo:

Erro → RTM → Recovery → Decisão → Dump → Investigação

💡 Isso acontece em milissegundos.


⚙️ Os serviços do RTM (o que ele realmente faz)

1️⃣ Captura do erro (o “detetive”)

O RTM intercepta:

  • Program checks (S0C4, S0C7…)
  • I/O errors
  • Machine checks
  • Falhas de memória

👉 Ele coleta o estado completo do sistema.

💡 Easter egg:

O SDWA é criado aqui — é literalmente o “snapshot do crime”.


2️⃣ Tentativa de recuperação (o “paramédico”)

Aqui entram os famosos:

  • ESTAE → nível da aplicação
  • FRR → nível do sistema

👉 O RTM pergunta:

“Alguém consegue salvar isso?”

💡 Curiosidade:

  • Muitos sistemas robustos usam ESTAE para evitar queda total
  • COBOL “puro” raramente usa diretamente… mas se beneficia disso sem saber

3️⃣ Decisão (o “juiz”)

Depois da tentativa:

  • Continua execução?
  • Finaliza a task?
  • Derruba o address space?

👉 Essa decisão é crítica.

💡 Insight:

Nem todo erro vira ABEND visível — alguns são absorvidos


4️⃣ Geração de evidência (o “perito”)

O RTM gera:

  • SYSUDUMP / SYSABEND / SYSMDUMP
  • SVC dump
  • LOGREC

👉 Isso vira seu material de análise.

💡 Frase forte:

Sem dump, você está cego.


🧹 RTM também limpa a bagunça (e isso é pouco falado)

Agora vem o que pouca gente sabe:

🔥 O RTM também atua quando TUDO DÁ CERTO

Quando seu job termina normalmente:

  • Fecha datasets
  • Libera memória
  • Cancela timers
  • Remove enqueues
  • Limpa control blocks

👉 Isso é feito de forma extremamente eficiente.

💡 Comentário Bellacosa:

“Se o RTM não limpasse… o z/OS virava um lixão em minutos”


🧩 RTM1 vs RTM2 (nível raiz)

🔹 RTM1 (System Level)

  • Falhas do sistema
  • Interface com FRR

🔹 RTM2 (Task Level)

  • Programas (COBOL aqui 👈)
  • Interface com ESTAE

👉 Fluxo clássico:

Erro

RTM1

FRR

RTM2

ESTAE

Decisão

💡 Isso é arquitetura de verdade.


📦 Dumps: o presente que ninguém quer… mas precisa

Tipos que você já viu:

  • SYSUDUMP → básico
  • SYSABEND → completo
  • SYSMDUMP → raiz (hex)

👉 E os de sistema:

  • SVC Dump
  • Standalone Dump

💡 Dica prática:

🔥 “Se o problema é estranho… peça SYSMDUMP”


🗂️ LOGREC: o histórico que salva sua vida

LOGREC guarda:

  • Erros de hardware
  • Eventos do sistema
  • Condições críticas

💡 Dica de ouro:

👉 Sempre comece por LOGREC antes do dump


🧠 SLIP e DAE (nível ninja)

🔹 SLIP

  • Armadilha de erro
  • Dispara dump sob condição

🔹 DAE

  • Evita dumps duplicados

💡 Produção sem isso:

caos + storage cheio


💥 Aplicação prática (COBOL raiz)

S0C7 — o clássico

👉 Normalmente:

  • Dado inválido em campo numérico

Mas o RTM te dá:

  • Instrução que falhou
  • Endereço
  • Conteúdo do campo

💡 Dica prática:

  1. Veja PSW
  2. Ache a instrução
  3. Verifique o dado
  4. Volte no código

🧠 Insight final (o que separa níveis)

❌ Júnior: “Deu S0C7”
❌ Pleno: “Campo inválido”
✅ Sênior: “Eu sei exatamente onde e por quê”


🏁 Conclusão (sem mimimi)

O RTM é:

  • 🔥 O guardião da estabilidade
  • 🔍 O perito do erro
  • ⚖️ O juiz da execução
  • 🧹 O faxineiro do sistema

💬 Frase pra levar pra vida

“COBOL não quebra…
o RTM só revela o que já estava errado.”

 

sexta-feira, 18 de junho de 2021

ABEND sem Mistérios — Parte IV

 

Bellacosa Mainframe e o abend sem misterios parte IV

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios — Parte IV

O que Acontece Dentro do IBM Z Quando um ABEND Ocorre: Registradores, Memória, TCB, RB e a Jornada de uma Instrução até a CPU

"Para o programador, um ABEND acontece quando o programa para. Para o processador, ele acontece quando uma única instrução viola uma regra da arquitetura."


Introdução

Até agora aprendemos:

  • o que é um ABEND;

  • como investigá-lo;

  • como descobrir sua causa raiz.

Agora vamos entrar em um território que poucos programadores COBOL exploram.

Vamos olhar o problema pelo ponto de vista do próprio IBM Z.

Imagine que você pudesse entrar dentro do processador durante um S0C4.

O que estaria acontecendo?

Quem decidiu interromper seu programa?

Quem chamou o dump?

Como a CPU sabe exatamente qual instrução falhou?

Por que o sistema consegue informar o endereço exato onde tudo aconteceu?

A resposta está na arquitetura do IBM Z.


O IBM Z nunca executa COBOL

Essa é uma das primeiras grandes descobertas.

O processador IBM Z não conhece COBOL.

Nem PL/I.

Nem C.

Nem Java.

Muito menos JCL.

A CPU conhece apenas uma linguagem:

Machine Instructions

Ou seja,

milhões de instruções binárias.


O caminho de um programa

Quando escrevemos:

ADD WS-VALOR
 TO WS-TOTAL.

O compilador transforma isso em dezenas de instruções de máquina.

O fluxo verdadeiro é:

COBOL

↓

Enterprise COBOL Compiler

↓

Assembler

↓

Objeto

↓

Binder

↓

Load Module

↓

Machine Instructions

↓

CPU IBM Z

Quando ocorre um S0C7,

não foi a instrução ADD que falhou.

Foi uma instrução de máquina gerada pelo compilador.


A CPU trabalha uma instrução por vez

Imagine:

READ

MOVE

ADD

WRITE

Para nós parecem quatro comandos.

Para o processador,

podem representar centenas de instruções.

Cada instrução passa por etapas.

Buscar

↓

Decodificar

↓

Executar

↓

Gravar Resultado

Esse processo acontece bilhões de vezes por segundo.


Quando nasce um S0C4

Imagine uma instrução tentando acessar um endereço inexistente.

A CPU verifica:

Endereço

↓

Área permitida?

↓

SIM

↓

Executa

ou

Endereço

↓

Área permitida?

↓

NÃO

↓

Program Interrupt

Nesse instante,

o S0C4 começa a nascer.


O Program Interrupt

O processador possui dezenas de tipos de interrupções.

Algumas delas:

  • Protection Exception

  • Addressing Exception

  • Operation Exception

  • Data Exception

  • Overflow

  • Fixed Point Divide

Quando ocorre uma dessas situações,

a CPU interrompe imediatamente a instrução.

Ela não pergunta ao programa se deseja continuar.


O papel do PSW

O Program Status Word é um dos componentes mais importantes da arquitetura IBM Z.

Ele contém informações como:

  • endereço da próxima instrução;

  • modo de execução;

  • chave de proteção;

  • condição da CPU;

  • máscara de interrupções.

É praticamente o "painel de controle" do processador.

Sempre que ocorre um ABEND,

o PSW é salvo.

É por isso que conseguimos descobrir exatamente onde tudo aconteceu.


Registradores: a mesa de trabalho da CPU

Imagine um marceneiro.

Sobre sua bancada existem:

  • régua;

  • lápis;

  • parafusos;

  • martelo.

A CPU possui algo parecido.

São os registradores.

Ela utiliza esses espaços para guardar:

  • endereços;

  • parâmetros;

  • resultados;

  • ponteiros;

  • contadores.

Quando um dump é produzido,

todos eles são preservados.


O famoso R15

Quem trabalha com COBOL logo aprende sobre o registrador R15.

Ele normalmente contém:

  • endereço inicial de programas;

  • códigos de retorno;

  • informações importantes durante CALLs.

Em muitas análises,

o primeiro registrador observado é justamente ele.


O que é Storage?

Quando dizemos:

WS-NOME

PIC X(30)

Essa variável ocupa memória.

No IBM Z essa memória recebe o nome de:

Storage

É nela que vivem:

  • variáveis COBOL;

  • buffers;

  • tabelas;

  • áreas de comunicação;

  • parâmetros.

Um S0C4 quase sempre está relacionado ao uso incorreto dessa Storage.


O conceito de Address Space

Uma dúvida comum dos iniciantes é:

"O programa acessa toda a memória do computador?"

Não.

Cada JOB ou região CICS executa em um Address Space.

Pense em um apartamento.

Cada morador possui:

  • sala;

  • cozinha;

  • quarto.

Um apartamento não invade o outro.

Da mesma forma,

um programa não pode acessar livremente a memória de outro Address Space.


O que é um TCB?

Agora chegamos a um dos componentes mais importantes do z/OS.

TCB significa:

Task Control Block

Toda tarefa possui um.

Ele contém informações fundamentais sobre a execução:

  • registradores;

  • PSW;

  • prioridade;

  • estado;

  • ponteiros;

  • RB atual.

Sem o TCB,

o sistema não saberia quem está executando.


Imagine um crachá

Imagine uma empresa.

Cada funcionário possui um crachá.

No IBM Z,

o TCB funciona exatamente assim.

Ele identifica aquela tarefa perante o sistema operacional.


O RB (Request Block)

Durante uma chamada de serviço,

o sistema cria um RB.

Ele registra:

  • quem chamou;

  • qual serviço foi solicitado;

  • qual rotina será executada;

  • para onde retornar.

Em uma investigação profunda,

a sequência de RBs ajuda a reconstruir a história da execução.


O Dispatcher

Quem decide qual programa utilizará a CPU?

Não é o JES2.

Não é o COBOL.

É o Dispatcher do z/OS.

Ele distribui tempo de processamento entre milhares de tarefas.

Imagine um maestro regendo uma orquestra.

Cada músico toca por alguns instantes.

Depois outro assume.

Tudo acontece tão rapidamente que parece simultâneo.


O papel do Supervisor

Quando ocorre um Program Interrupt,

a CPU entrega o controle ao Supervisor do sistema operacional.

Ele analisa:

  • tipo da exceção;

  • PSW;

  • registradores;

  • TCB;

  • RB;

  • contexto da tarefa.

Depois decide:

  • gerar dump;

  • emitir mensagens;

  • encerrar a tarefa.

É nesse momento que nasce oficialmente o ABEND.


Como nasce um Dump

O Dump não aparece por mágica.

O sistema percorre diversas estruturas.

Ele salva:

  • registradores;

  • memória;

  • TCB;

  • RB;

  • PSA;

  • LSQA;

  • CSA;

  • pilhas;

  • módulos carregados;

  • áreas do LE.

Tudo isso permite que o problema seja investigado posteriormente.


A pilha de chamadas

Quando fazemos:

Programa A

↓

CALL B

↓

CALL C

↓

CALL D

O sistema mantém uma pilha.

Ela registra:

  • quem chamou;

  • quem foi chamado;

  • para onde retornar.

O CEEDUMP utiliza essa pilha para montar o famoso Traceback.


Por que um Offset é tão importante?

Quando o compilador gera o Load Module,

as linhas do COBOL deixam de existir.

O executável conhece apenas endereços.

Por isso o dump mostra:

Offset

0000A3F2

Ferramentas como IBM Fault Analyzer, Abend-AID e IDz fazem o caminho inverso: relacionam esse offset ao programa-fonte, permitindo localizar a instrução COBOL correspondente.


O papel do Binder

Muitos iniciantes acreditam que a compilação termina quando o compilador gera o objeto.

Na verdade,

existe outra etapa fundamental.

O Binder (antigo Link-Editor) reúne:

  • módulos objeto;

  • bibliotecas;

  • sub-rotinas;

  • Language Environment.

O resultado é o Load Module, que será executado pelo z/OS.

Sem essa etapa,

não existe programa executável.


E no CICS?

Dentro do CICS tudo continua acontecendo.

A diferença é que existe outra camada.

Terminal

↓

Task CICS

↓

Dispatcher CICS

↓

Programa COBOL

↓

Language Environment

↓

CPU

Quando ocorre um ASRA,

o CICS captura o Program Interrupt,

gera suas mensagens

e encerra a Task.


O que realmente vê um SysProg?

Enquanto o desenvolvedor observa:

S0C7

O SysProg costuma enxergar algo muito maior.

Ele analisa:

  • PSW;

  • TCB;

  • RB;

  • ASCB;

  • SRB;

  • Dispatcher;

  • WLM;

  • armazenamento;

  • interrupções;

  • módulos do sistema.

São duas perspectivas diferentes do mesmo problema.


Curiosidades da arquitetura IBM Z

  • O IBM Z possui mecanismos de proteção de memória extremamente sofisticados, fundamentais para executar milhares de workloads simultaneamente com segurança.

  • Um único sistema pode manter milhares de Tasks ativas, cada uma com seu próprio contexto de execução.

  • O PSW é salvo e restaurado continuamente durante trocas de contexto entre tarefas.

  • Grande parte da confiabilidade do IBM Z vem justamente da capacidade de detectar exceções e interromper apenas a tarefa problemática, preservando o restante do sistema.


O caminho completo de um ABEND

Programa COBOL

↓

Compilador

↓

Load Module

↓

CPU executa instrução

↓

Program Interrupt

↓

Supervisor z/OS

↓

Análise do contexto

↓

Dump

↓

Mensagens

↓

ABEND

↓

SDSF

↓

Investigação

↓

Correção

↓

Aprendizado

Conclusão

Quando compreendemos a arquitetura interna do IBM Z, os ABENDs deixam de ser mensagens misteriosas e passam a ser eventos perfeitamente explicáveis.

Um S0C4 não é "azar". Um S0C7 não é "capricho do compilador". Eles são a consequência direta de mecanismos de proteção cuidadosamente projetados para preservar a integridade do sistema.

Essa é uma das grandes diferenças do Mainframe: cada interrupção, cada registrador salvo, cada PSW capturado e cada dump gerado fazem parte de uma arquitetura construída para ser observável, previsível e extremamente resiliente.

O Programador Padawan que entende essa jornada deixa de enxergar apenas o código COBOL e passa a compreender como hardware, sistema operacional, compilador e aplicação trabalham em perfeita sintonia. É nesse momento que ele começa a pensar como um verdadeiro especialista em IBM Z.


quarta-feira, 26 de maio de 2021

ABEND sem Mistérios — Parte III

 

Bellacosa Mainframe em abend sem misterio parte III

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios — Parte III

Como Pensam os Especialistas em Mainframe: Engenharia de Diagnóstico, Dumps, IPCS e a Arte de Encontrar a Causa Raiz

"Um bom programador corrige um ABEND. Um grande engenheiro descobre por que ele nunca deveria ter acontecido."


Introdução

Até aqui, aprendemos duas grandes lições.

Na Parte 1 entendemos:

  • o que é um ABEND;

  • como ele nasce;

  • quais são os principais códigos encontrados no dia a dia.

Na Parte 2 aprendemos:

  • como investigar;

  • quais mensagens analisar;

  • como utilizar JESMSGLG, JESYSMSG, CEEDUMP e SYSOUT.

Agora chegamos ao terceiro nível.

Aqui deixamos de ser apenas programadores COBOL.

Passamos a pensar como verdadeiros engenheiros de software para IBM Z.

É exatamente essa mudança de mentalidade que diferencia um desenvolvedor comum de um profissional extremamente valorizado pelos grandes bancos.


O maior erro durante uma investigação

Imagine que um programa termina com:

S0C7

O iniciante pensa:

"Preciso corrigir este S0C7."

O profissional pensa diferente.

"O S0C7 é apenas consequência.
O que gerou os dados inválidos?"

Essa diferença muda completamente a investigação.


O conceito de Causa Raiz

Todo problema possui duas causas.

Sintoma

É aquilo que aparece.

S0C4

S0C7

ASRA

U4038

Causa

É o verdadeiro problema.

Exemplo:

Arquivo recebido com dados inválidos

↓

Campo não validado

↓

ADD

↓

S0C7

O ABEND não começou no ADD.

Começou quando alguém permitiu que dados incorretos chegassem até ali.


O pensamento em camadas

Especialistas enxergam uma aplicação como diversas camadas.

Usuário

↓

Tela

↓

CICS

↓

Programa COBOL

↓

COPYBOOK

↓

Db2

↓

VSAM

↓

MQ

↓

JCL

↓

z/OS

O erro pode nascer em qualquer uma delas.


O princípio dos "Cinco Porquês"

Uma técnica extremamente utilizada em engenharia é o 5 Whys, criado dentro do Sistema Toyota de Produção.

Exemplo.

Programa terminou em S0C7.

Por quê?

Porque tentou somar caracteres.

Por quê?

Porque recebeu "ABCDE".

Por quê?

Porque o arquivo veio corrompido.

Por quê?

Porque o sistema fornecedor alterou o layout.

Por quê?

Porque não existia contrato de interface.

Agora encontramos a verdadeira causa.


O ABC da investigação

Todo incidente pode ser dividido em três perguntas.

A

O que aconteceu?

ABEND S0C4

B

Onde aconteceu?

Programa

Parágrafo

Offset

C

Por que aconteceu?

Essa é a parte difícil.


O conceito de Timeline

Um erro nunca aparece instantaneamente.

Existe uma sequência.

08:00

Arquivo recebido

↓

08:03

Programa inicia

↓

08:05

Registro inválido

↓

08:05

Campo carregado

↓

08:06

Cálculo

↓

08:06

S0C7

Perceba que o problema nasceu seis minutos antes do ABEND.


O poder do CEEDUMP

O CEEDUMP é praticamente uma fotografia.

Mas imagine que você possui uma fotografia de um acidente.

Ela mostra:

  • onde ocorreu;

  • quem estava presente;

  • posição dos veículos.

Mas ela não mostra o momento da colisão.

Por isso precisamos combinar várias evidências.


Entrando no mundo do IPCS

Poucos iniciantes conhecem esta ferramenta.

IPCS significa:

Interactive Problem Control System

É uma das ferramentas mais importantes do z/OS.

Ela permite analisar:

  • dumps completos;

  • memória;

  • registradores;

  • módulos carregados;

  • PSW;

  • TCB;

  • ASCB;

  • cadeias de controle do sistema.

Na prática,

é o laboratório forense do IBM Z.


O que um Dump realmente contém?

Muitos imaginam um dump como um arquivo de texto.

Na realidade ele contém praticamente toda a memória capturada.

Por exemplo:

Endereços

Buffers

Variáveis

Registradores

Storage

TCBs

RBs

LSQA

CSA

ECSA

PSA

Núcleo

É literalmente uma fotografia da memória.


O famoso PSW

O Program Status Word é uma das primeiras informações analisadas.

Ele responde:

  • onde a CPU estava;

  • em qual instrução;

  • qual modo de execução;

  • qual estado do processador.

Por isso um SysProg costuma perguntar:

"Qual é o PSW?"


Registradores: a mochila do processador

O IBM Z possui registradores gerais.

Imagine um pedreiro.

Antes de subir uma escada,

ele coloca ferramentas na mochila.

A CPU faz exatamente isso.

Antes de executar instruções,

ela guarda informações temporárias nos registradores.

Quando ocorre um ABEND,

essa mochila continua exatamente como estava.

É por isso que os registradores são tão importantes.


O papel da Language Environment (LE)

Praticamente todo programa COBOL moderno executa sobre o Language Environment.

Ele fornece:

  • gerenciamento de memória;

  • tratamento de exceções;

  • traceback;

  • serviços comuns;

  • interoperabilidade entre COBOL, C, C++ e PL/I.

Sem o LE, muitos diagnósticos seriam muito mais difíceis.


Quando um U4038 esconde outro erro

Muitos iniciantes acreditam que:

U4038

↓

Erro encontrado

Na realidade,

muitas vezes acontece isto.

S0C7

↓

Language Environment

↓

U4038

Ou seja,

o U4038 pode ser apenas uma "embalagem" para outro problema.

Sempre investigue além do código retornado.


O papel do Fault Analyzer

Hoje muitos bancos utilizam o IBM Fault Analyzer.

Ele transforma um dump complexo em algo muito mais amigável.

Por exemplo.

Em vez de mostrar:

Offset

00003A8F

Ele mostra:

Programa

CLIENTES

Linha

538

Campo

WS-SALDO

Economiza horas de investigação.


Abend-AID

Outra ferramenta extremamente popular.

Ela apresenta:

  • variáveis;

  • CALL Stack;

  • conteúdo dos registros;

  • SQLCA;

  • áreas de memória;

  • File Status;

  • tabelas.

É praticamente um "Google Maps" do dump.


O valor de um bom Log

Imagine um programa sem nenhum DISPLAY.

Agora imagine outro com mensagens como:

Iniciando cálculo...

Cliente 12345

Saldo encontrado

Calculando juros

Atualizando Db2

Commit realizado

Qual será mais fácil de investigar?

A resposta é óbvia.

Logs bem escritos reduzem drasticamente o tempo de diagnóstico.


Engenharia defensiva

Programadores experientes evitam ABENDs antes mesmo que eles aconteçam.

Como?

Validando tudo.

IF NUMERIC

IF FILE STATUS

IF SQLCODE

IF RESP

IF RESP2

IF LENGTH

IF EOF

IF RETURN-CODE

Quem valida dados produz programas muito mais robustos.


Os três níveis da depuração

Nível 1

Corrigir o erro.

Nível 2

Descobrir a causa.

Nível 3

Modificar o sistema para impedir que volte a acontecer.

Esse terceiro nível é onde nasce a excelência técnica.


O pensamento dos grandes bancos

Em ambientes críticos,

a pergunta raramente é:

"Quem escreveu o programa?"

A pergunta costuma ser:

"Por que nossos processos permitiram que isso chegasse à produção?"

Perceba a diferença.

Sai o culpado.

Entra a melhoria contínua.


O custo de um ABEND

Um único ABEND pode provocar:

  • atraso em milhares de transações;

  • indisponibilidade de canais digitais;

  • bloqueio de filas MQ;

  • rollback de atualizações no Db2;

  • atraso em processamentos batch;

  • impacto financeiro;

  • horas de investigação.

Por isso bancos investem tanto em observabilidade, monitoramento e prevenção.


Checklist profissional antes de corrigir um ABEND

Nunca altere o código antes de responder:

  • Qual foi o primeiro erro registrado?

  • O ABEND é causa ou consequência?

  • Houve mudança recente de layout, JCL ou copybook?

  • O problema é reproduzível?

  • Existe CEEDUMP ou SYSMDUMP?

  • O SQLCODE, FILE STATUS ou RESP indicavam falha antes do ABEND?

  • A correção elimina apenas o sintoma ou resolve a origem?


A evolução de um Programador Padawan

Todo profissional passa por estágios.

1

Tenho medo do ABEND.

↓

2

Consigo identificar o código.

↓

3

Aprendo a usar o SDSF.

↓

4

Entendo CEEDUMP.

↓

5

Interpreto mensagens do z/OS.

↓

6

Analiso offsets.

↓

7

Leio dumps.

↓

8

Descubro causas raiz.

↓

9

Evito novos ABENDs.

↓

10

Ensino outras pessoas.

É exatamente assim que surgem os especialistas.


Conclusão

A verdadeira maturidade técnica não está em decorar centenas de códigos de ABEND, mas em desenvolver uma forma estruturada de investigar problemas.

No IBM Z, praticamente nada acontece por acaso. Cada mensagem do JES2, cada registro do SDSF, cada CEEDUMP, cada offset e cada registrador contam parte da história. O papel do engenheiro é reunir essas peças até reconstruir a sequência completa dos acontecimentos.

Quando você deixa de perguntar "qual foi o ABEND?" e passa a perguntar "qual decisão, dado ou processo tornou esse ABEND inevitável?", seu modo de pensar muda para sempre.

É nesse momento que você deixa de ser apenas um programador COBOL e passa a enxergar o IBM Z como ele realmente é: um dos sistemas computacionais mais sofisticados, observáveis e resilientes já construídos. E essa é a habilidade que transforma um simples solucionador de erros em um verdadeiro especialista em Mainframe.

segunda-feira, 19 de abril de 2021

ABEND sem Mistérios — Parte II

 

Bellacosa Mainframe abend sem misterios parte II

☕ Um Café no Bellacosa Mainframe

ABEND sem Mistérios — Parte II

Como um Programador Padawan Aprende a Investigar Dumps, Mensagens e Descobrir a Verdadeira Causa de um ABEND

"O ABEND nunca é o verdadeiro problema. Ele é apenas o último grito do sistema antes de interromper a execução."


Introdução

No primeiro artigo vimos o que é um ABEND, como ele nasce e conhecemos os principais códigos encontrados no dia a dia de um programador COBOL.

Mas existe uma pergunta que diferencia um programador iniciante de um profissional experiente.

Não é:

"Qual foi o ABEND?"

A pergunta correta é:

"Por que ele aconteceu?"

É aqui que começa o verdadeiro trabalho.

O ABEND é apenas o sintoma.

A causa quase sempre aconteceu vários segundos — ou milhares de instruções — antes.

Aprender a investigar um ABEND é muito parecido com o trabalho de um perito criminal.

O investigador nunca chega ao local perguntando:

"Quem é o culpado?"

Ele primeiro coleta evidências.

No IBM Z acontece exatamente a mesma coisa.


O que realmente acontece quando um programa falha?

Imagine uma execução simples.

JES2

↓

Initiator

↓

Language Environment

↓

Programa COBOL

↓

OPEN CLIENTES

↓

READ

↓

PROCESSA

↓

WRITE

↓

END

Agora imagine que durante um cálculo acontece um S0C7.

O sistema imediatamente interrompe tudo.

Mas antes de encerrar, ele registra uma enorme quantidade de informações.

É exatamente isso que usamos na investigação.


O IBM Z deixa pistas

Quando ocorre um ABEND, normalmente encontramos diversas evidências.

Entre elas:

  • JESMSGLG

  • JESYSMSG

  • SYSOUT

  • SYSPRINT

  • SYSUDUMP

  • SYSMDUMP

  • CEEDUMP

  • CEEMSG

  • mensagens IEC

  • mensagens IEF

  • mensagens DFH (CICS)

Cada uma responde perguntas diferentes.


O primeiro erro do iniciante

O Padawan normalmente faz isto:

ABEND=S0C7

↓

Corrige uma variável

↓

Executa novamente

O profissional faz diferente.

ABEND

↓

Mensagens

↓

JCL

↓

Dump

↓

Código

↓

Dados

↓

Correção

A diferença parece pequena.

Mas economiza horas de trabalho.


Entendendo o JESMSGLG

O JESMSGLG é praticamente um diário da execução.

Ele informa:

  • início do JOB;

  • alocação dos datasets;

  • criação de arquivos temporários;

  • início de cada STEP;

  • mensagens do sistema;

  • encerramento.

Muitas vezes a causa aparece ali mesmo.

Exemplo:

IEC141I 013-20

Nesse momento você já sabe que provavelmente existe um problema na abertura de arquivos.

Nem precisa olhar o COBOL ainda.


O papel do JESYSMSG

Enquanto o JESMSGLG conta a história,

o JESYSMSG mostra as mensagens produzidas pelo sistema operacional.

Ali aparecem mensagens como:

IEF142I

IEC141I

IGD

IDC

CSV

IEA

ICH

Cada prefixo pertence a um componente do z/OS.

Com o tempo, o programador começa a reconhecê-los automaticamente.


O que é o SYSOUT?

Toda instrução

DISPLAY

vai parar no SYSOUT.

Muitos bancos utilizam DISPLAY apenas durante testes.

Mas programas bem escritos produzem mensagens extremamente úteis.

Exemplo:

Cliente

123456

Saldo

250.00

Calculando Juros...

Se logo depois aparece um S0C7...

Já sabemos exatamente onde procurar.


DISPLAY é seu amigo

Nunca tenha medo de utilizar DISPLAY durante o desenvolvimento.

Exemplo:

DISPLAY 'ENTROU NO PARAGRAFO A'

DISPLAY WS-CLIENTE

DISPLAY WS-SALDO

DISPLAY SQLCODE

Depois de homologado...

Eles podem ser removidos ou controlados por parâmetros.


O famoso CEEDUMP

Se existe um documento que todo programador COBOL deveria aprender,

é o CEEDUMP.

Ele é produzido pelo Language Environment.

Nele encontramos:

  • última instrução executada;

  • registradores;

  • call stack;

  • variáveis;

  • condições;

  • traceback;

  • offsets;

  • informações do compilador.

É praticamente uma fotografia completa do programa no momento da falha.


O Call Stack

Imagine o programa abaixo.

PROGRAMA A

↓

CALL B

↓

CALL C

↓

CALL D

↓

S0C4

O CEEDUMP mostra exatamente esse caminho.

A

↓

B

↓

C

↓

D

Agora sabemos onde investigar.


O Traceback

O traceback mostra:

Programa

↓

Seção

↓

Parágrafo

↓

Offset

Por exemplo:

CLIENTE

↓

CALCULA-JUROS

↓

0000A8

Esse offset permite localizar a instrução responsável.


O que são Offsets?

Um executável não trabalha com número de linhas.

Ele trabalha com endereços.

Imagine:

Linha 100

↓

Offset 00A2

O compilador gera um mapa relacionando:

offset

linha COBOL

Ferramentas como Fault Analyzer, Abend-AID e Debug Tool fazem essa conversão automaticamente.


Registradores

Durante a execução o processador utiliza registradores.

No IBM Z temos registradores gerais.

Quando ocorre um dump, normalmente vemos algo parecido com:

R0

R1

R2

...

R15

Eles informam:

  • parâmetros;

  • endereços;

  • retorno de CALL;

  • ponteiros;

  • áreas de memória.

Para quem trabalha com LE e Assembler, esses registradores são ouro puro.


O famoso PSW

Outra informação importante é o:

Program Status Word

Ele informa:

  • endereço atual;

  • estado do processador;

  • modo de execução;

  • condição.

Quando alguém diz:

"Veja o PSW"

Está dizendo:

"Descubra exatamente onde a CPU estava quando tudo parou."


Dumps

Existem vários tipos.

SYSUDUMP

Mais compacto.

Muito utilizado para aplicações.


SYSMDUMP

Muito mais completo.

Contém grandes regiões de memória.

É excelente para análise profunda.


CEEDUMP

Voltado ao Language Environment.

É o favorito dos desenvolvedores COBOL.


Como investigar um S0C7

Imagine:

COMPUTE

TOTAL = VALOR * TAXA

Resultado:

S0C7

Primeira pergunta:

VALOR

é numérico?

Segunda:

TAXA

é válida?

Terceira:

Quem carregou essas variáveis?

A origem do erro pode estar dezenas de linhas antes.


Como investigar um S0C4

Perguntas clássicas:

Existe índice fora do OCCURS?

Existe tabela sem inicialização?

Existe ponteiro inválido?

CALL recebeu parâmetros errados?

LINKAGE está correta?

O programa acessou memória liberada?


Como investigar um S013

Antes de abrir o COBOL...

Verifique:

DDNAME

↓

RECFM

↓

LRECL

↓

BLKSIZE

↓

DISP

↓

Dataset correto

↓

Catalogado?

↓

Existe?

Muitas vezes o COBOL está perfeito.

O erro está no JCL.


A importância do JCL

Programadores iniciantes tendem a pensar:

"Meu trabalho termina no COBOL."

Na prática,

bons programadores COBOL conhecem muito bem:

  • JCL;

  • IDCAMS;

  • SORT;

  • IEBGENER;

  • DFSORT;

  • GDGs;

  • VSAM;

  • Catalog.

Quanto melhor você entender o ambiente,

menos ABENDs terá.


O papel do CICS

Quando aparece:

ASRA

O erro raramente começa no CICS.

O CICS apenas detectou que algo deu errado dentro do programa.

A investigação continua:

ASRA

↓

DFH Messages

↓

Trace

↓

Dump

↓

Programa

Ferramentas utilizadas pelos grandes bancos

Pouquíssimos profissionais analisam dumps manualmente o tempo todo.

Grandes instituições normalmente utilizam ferramentas como:

  • IBM Fault Analyzer

  • IBM Debug Tool

  • IBM Application Performance Analyzer

  • IBM File Manager

  • Abend-AID (BMC)

  • Xpediter

  • IBM IPCS

  • IBM Developer for z/OS (IDz)

Essas ferramentas aceleram a análise ao transformar endereços, offsets e registradores em informações mais fáceis de interpretar.

Mesmo assim, elas não substituem o conhecimento. Um bom analista sabe interpretar as evidências e confirmar se a ferramenta está apontando a causa correta.


Um roteiro de investigação profissional

Sempre que receber um chamado de produção, siga uma sequência lógica:

Receber o chamado

↓

Anotar o ABEND

↓

Identificar STEP

↓

Consultar JESMSGLG

↓

Consultar JESYSMSG

↓

Verificar SYSOUT

↓

Ler CEEDUMP

↓

Localizar o traceback

↓

Encontrar o offset

↓

Relacionar com o código COBOL

↓

Analisar os dados de entrada

↓

Reproduzir o erro

↓

Corrigir

↓

Testar novamente

Essa abordagem evita "chutes" e torna a investigação repetível.


Os erros mais comuns dos Padawans

  • Corrigir o código sem ler as mensagens do sistema.

  • Ignorar o JCL e assumir que o COBOL está errado.

  • Não validar dados antes de cálculos e conversões.

  • Usar índices ou subscritos fora dos limites de tabelas.

  • Não conferir SQLCODE, FILE STATUS ou RESP/RESP2 após operações críticas.

  • Descartar o CEEDUMP sem analisá-lo.

  • Não reproduzir o problema em ambiente de testes antes de aplicar uma correção.


O perfil de um excelente investigador de ABEND

Os profissionais mais respeitados em grandes bancos raramente são aqueles que escrevem mais código.

São aqueles que conseguem responder rapidamente perguntas como:

  • O erro veio do programa ou do ambiente?

  • O problema é de dados, lógica ou infraestrutura?

  • O ABEND é a causa ou apenas a consequência?

  • Qual foi a primeira mensagem relevante?

  • É possível reproduzir o problema?

Eles tratam cada incidente como uma investigação técnica, baseada em evidências.


Conclusão

Dominar ABENDs não significa decorar centenas de códigos. Significa desenvolver uma forma estruturada de pensar.

O IBM Z sempre deixa pistas: mensagens, dumps, registradores, traceback, offsets e logs. Quem aprende a reuni-las deixa de agir por tentativa e erro e passa a trabalhar como um verdadeiro engenheiro de software.

Todo programador passa pelo primeiro S0C7, pelo primeiro S0C4 ou pelo primeiro ASRA. A diferença está em como reage. O iniciante vê apenas um erro. O profissional enxerga uma oportunidade de compreender melhor o funcionamento interno do sistema.

No fim, os melhores desenvolvedores COBOL não são aqueles que nunca encontram ABENDs. São aqueles que conseguem transformá-los em conhecimento, experiência e sistemas cada vez mais confiáveis.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...