Translate

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.

Sem comentários:

Enviar um comentário