Translate

Mostrar mensagens com a etiqueta Abend Aid. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Abend Aid. Mostrar todas as mensagens

quarta-feira, 13 de fevereiro de 2013

☕🔥 ABEND ASRA — O “COLAPSO DA REALIDADE” NO CICS

 

Bellacosa Mainframe e o abend ASRA

☕🔥 ABEND ASRA — O “COLAPSO DA REALIDADE” NO CICS

Quando o CICS Olha Para Seu Programa e Diz:

“ALGO AQUI EXPLODIU.”

Se existe um erro que traumatiza todo programador COBOL iniciante em ambiente online…

é o lendário:

🚨 ASRA

E normalmente ele aparece assim:

DFHAC2001 TRANSACTION ABCD ABEND ASRA

ou:

AEI0
ASRA
PROGRAM CHECK

E naquele momento…

o Padawan COBOL entra em pânico.


☕ O QUE É O ASRA?

O ASRA é um:

🚨 ABEND DO CICS

Ele significa que:

💥 O PROGRAMA SOFREU UM PROGRAM CHECK

Traduzindo para linguagem humana:

O COBOL tentou fazer algo impossível.


🔥 O ASRA NÃO É O ERRO REAL

Isso é MUITO importante.

ASRA é apenas:

“O mensageiro da tragédia.”

O verdadeiro erro geralmente está por trás dele:

  • S0C7

  • S0C4

  • S0C1

  • S0CB

  • S0C6

  • Protection Exception

  • Data Exception

O CICS encapsula tudo isso em:

🚨 ASRA


☕ A FILOSOFIA DO ASRA

O CICS basicamente diz:

“Seu programa morreu durante execução.”

Mas não necessariamente ONDE.

Nem POR QUÊ.

Você precisa investigar.

E aí começa a jornada do Jedi Mainframe.


🔥 O ASRA MAIS FAMOSO DO UNIVERSO

🚨 ASRA + S0C7

O rei absoluto dos juniors COBOL.


☕ O QUE É O S0C7?

Erro de conversão decimal.

Exemplo clássico:

MOVE 'ABC' TO WS-VALOR-NUMERICO
ADD 1 TO WS-VALOR-NUMERICO

BOOM.

O processador decimal do IBM Z entra em colapso.


🔥 COMO O CICS ENXERGA ISSO

O COBOL gera instruções máquina.

O processador executa.

O hardware detecta:

❌ DADO INVÁLIDO PARA OPERAÇÃO DECIMAL

O z/OS gera:

S0C7

O CICS intercepta.

E transforma em:

ASRA

☕ ANALOGIA BELLACOSA MAINFRAME

Imagine:

O S0C7 é:

🔥 O MOTOR EXPLODINDO

E o ASRA é:

🚓 O POLICIAL FECHANDO A ESTRADA


🔥 OS VERDADEIROS VILÕES ESCONDIDOS ATRÁS DO ASRA


☠️ S0C7 — DATA EXCEPTION

O campeão absoluto.

Problema decimal.


☠️ S0C4 — PROTECTION EXCEPTION

Tentativa de acessar memória inválida.


☠️ S0C1 — OPERATION EXCEPTION

Código executável inválido.


☠️ S0CB — DECIMAL DIVIDE EXCEPTION

Divisão decimal impossível.

Exemplo:

DIVIDE 0 INTO WS-VALOR

☕ O QUE O PADAWAN PRECISA ENTENDER

No CICS:

ASRA ≠ causa raiz

ASRA = consequência.


🔥 O FLUXO DA TRAGÉDIA

COBOL
 ↓
EXECUÇÃO
 ↓
PROGRAM CHECK
 ↓
z/OS detecta exceção
 ↓
CICS intercepta
 ↓
ASRA

☕ O ERRO CLÁSSICO DO COBOL JUNIOR

01 WS-VALOR       PIC 9(05).
01 WS-TEXTO       PIC X(05).

MOVE 'ABCDE' TO WS-VALOR

Até aqui pode passar.

Mas depois:

ADD 1 TO WS-VALOR

Resultado:

💥 ASRA/S0C7


🔥 COMO INVESTIGAR O ASRA PASSO A PASSO

☕ PASSO 1 — IDENTIFIQUE A TRANSACTION

Mensagem típica:

DFHAC2001 TRANSACTION PAY1 ABEND ASRA

Transaction:

PAY1

☕ PASSO 2 — IDENTIFIQUE O PROGRAMA

O dump geralmente mostra:

PROGRAM: COBPAY01

Agora temos o suspeito principal.


☕ PASSO 3 — DESCUBRA O CÓDIGO REAL

O segredo está aqui:

PSW AT TIME OF ERROR
INTERRUPTION CODE

ou:

AP0001 ASRA CAUSED BY S0C7

Aí você encontra:

  • S0C7

  • S0C4

  • etc.


🔥 PASSO 4 — LOCALIZE O OFFSET

Exemplo:

OFFSET X'01A4'

Esse é o endereço onde tudo explodiu.


☕ O QUE É OFFSET?

É a posição da instrução dentro do programa load module.

Exemplo:

PROGRAMA + 01A4

🔥 COMO TRANSFORMAR OFFSET EM LINHA COBOL

Aqui nasce o verdadeiro Jedi.

Você precisa:

  • LISTING do compile

  • SYSADATA

  • Abend-AID

  • Fault Analyzer

  • XREF

No listing COBOL:

0001A4  ADD WS-TAXA TO WS-TOTAL

BOOM.

Achamos a linha assassina.


☕ O MAIOR SEGREDO DO MAINFRAME

O DUMP SEMPRE CONTA A HISTÓRIA.

O problema é:

Junior olha dump como Matrix.

Veterano lê dump como romance policial.


🔥 COMO LER O DUMP DO ASRA


☕ REGISTERS

Veja:

REGISTER 12
REGISTER 15

Eles ajudam localizar:

  • Base register

  • Programa

  • Endereço


☕ PSW — PROGRAM STATUS WORD

O “GPS do desastre”.

Mostra:

  • Onde morreu

  • Estado da CPU

  • Instrução ativa


☕ STORAGE DUMP

Mostra memória.

Veteranos encontram:

  • Campo inválido

  • Packed decimal corrompido

  • Byte hexadecimal estranho


🔥 O PACKED DECIMAL MALDITO

O maior assassino COBOL do planeta.

Exemplo:

PIC S9(7)V99 COMP-3

Packed decimal usa:

hexadecimal compactado

Se UM nibble estiver errado:

💥 S0C7


☕ EXEMPLO REAL DE HORROR

Packed válido:

12345C

Packed inválido:

12345F

ou:

12AB5C

Resultado:

🚨 DATA EXCEPTION


🔥 POR QUE ISSO ACONTECE?

Muitas vezes:

  • Arquivo corrompido

  • Layout errado

  • COPYBOOK desatualizado

  • Campo redefinido

  • REDEFINES perigoso

  • MOVE inválido

  • Overlay de memória


☕ O DEMÔNIO CHAMADO REDEFINES

Junior faz:

01 REGISTRO.
   05 VALOR-NUM PIC 9(05).

01 REGISTRO-R REDEFINES REGISTRO.
   05 VALOR-TXT PIC X(05).

Depois:

MOVE 'ABCDE' TO VALOR-TXT
ADD 1 TO VALOR-NUM

Resultado:

☠️ ASRA/S0C7


🔥 O ASRA S0C4 — O MAIS SOMBRIO

Esse assusta veteranos também.


☕ O QUE É S0C4?

Tentativa de acessar memória inválida.

Como:

  • Ponteiro errado

  • Tabela estourada

  • LINKAGE incorreta

  • DFHCOMMAREA inválida

  • Subscript fora do limite


☕ EXEMPLO

MOVE WS-TABELA(9999) TO WS-CAMPO

Mas a tabela tem:

100 posições

Resultado:

💥 S0C4 → ASRA


🔥 O CICS E A DFHCOMMAREA

Outro clássico.

Programa espera:

01 DFHCOMMAREA.
   05 WS-CODIGO PIC 9(05).

Mas recebe lixo.

Ou tamanho menor.

Resultado:

☠️ ASRA


☕ COMO SOBREVIVER AO ASRA


✅ PASSO 1

Descobrir:

QUAL PROGRAM CHECK?


✅ PASSO 2

Encontrar:

OFFSET


✅ PASSO 3

Mapear:

OFFSET → LINHA COBOL


✅ PASSO 4

Inspecionar:

  • Campos

  • Hexadecimal

  • COMP-3

  • REDEFINES

  • Tabelas

  • COMMAREA


🔥 FERRAMENTAS DOS DEUSES MAINFRAME


☕ Abend-AID

Transforma dump em algo humano.


☕ Fault Analyzer

Sherlock Holmes do z/OS.


☕ CEDF

Debug online do CICS.


☕ IPCS

Modo hardcore absoluto.


🔥 A ORIGEM HISTÓRICA

ASRA existe desde os primórdios do CICS.

Décadas de 70/80.

O nome vem de:

“ABNORMAL TERMINATION”

com classificação específica do CICS.

Ele virou lendário porque:

praticamente TODO programador COBOL CICS já tomou ASRA.


☕ CURIOSIDADE SOMBRIA

Veteranos dizem:

“Não existe programador COBOL experiente sem cicatriz de ASRA.”


🔥 EASTER EGG MAINFRAME

Muitos programadores brincam:

“ASRA significa:

A Surra Real da Aplicação.”

Porque normalmente ele aparece:

  • em produção

  • sexta-feira

  • fechamento mensal

  • ou 5 minutos antes da reunião.


☕ O MAIOR ERRO DO JÚNIOR

Olhar apenas:

ASRA

e parar.

Não.

O segredo está atrás dele.


🔥 A VERDADE FINAL

ASRA não é apenas um erro.

Ele é:

☕ O CICS REVELANDO QUE A REALIDADE BINÁRIA DO SEU PROGRAMA FOI QUEBRADA.

E no mundo mainframe…

TODO BYTE TEM CONSEQUÊNCIAS.


sábado, 24 de fevereiro de 2007

O que é COBOL Bug Trap e Captura de ABEND?

Bellacosa Mainframe o que é Bug Trap em Cobol


O que é COBOL Bug Trap e Captura de ABEND?

Em ambientes Mainframe, especialmente em aplicações críticas, um dos maiores desafios é descobrir rapidamente:

Por que o programa falhou?
Onde ocorreu o erro?
Qual variável causou o problema?

Para isso existem mecanismos conhecidos como:

Bug Trap

e

Captura de ABEND


O que é um ABEND?

ABEND significa:

Abnormal End

Ou seja:

Finalização Anormal

O programa termina devido a um erro.


Exemplos de ABENDs comuns

ABENDCausa
S0C7Erro de dados numéricos
S0C4Violação de memória
S806Programa não encontrado
SB37Falta de espaço
U4038Erro definido pela aplicação
ASRAExceção em CICS

Exemplo de S0C7

MOVE 'ABC' TO WS-VALOR-NUM
ADD 1 TO WS-VALOR-NUM

Resultado:

S0C7

O Problema

Sem diagnóstico adequado você recebe apenas:

JOB ABENDED

e precisa descobrir:

Qual campo?
Qual linha?
Qual programa?

O que é Bug Trap?

Bug Trap é uma técnica ou ferramenta que captura informações detalhadas antes do programa terminar.

Objetivo:

Transformar um ABEND misterioso
em um erro fácil de analisar

O que o Bug Trap captura?

  • Nome do programa

  • Data e hora

  • Parágrafo COBOL

  • Variáveis

  • SQLCODE

  • CICS EIBRESP

  • Chave VSAM

  • Dados recebidos

  • Stack de chamadas


Fluxo Simplificado

Erro
 ↓
Bug Trap
 ↓
Captura informações
 ↓
Gera relatório
 ↓
ABEND

Exemplo

Sem Bug Trap:

S0C7

Com Bug Trap:

PROGRAMA = FIN001

PARAGRAFO = CALCULA-JUROS

CAMPO = WS-SALDO

VALOR = ABCDEF

ABEND = S0C7

Captura de ABEND no COBOL

Uma prática comum é criar rotinas padronizadas.


Exemplo

IF SQLCODE NOT = 0

   PERFORM TRATA-ERRO

END-IF

Rotina de Tratamento

TRATA-ERRO.

DISPLAY 'ERRO SQL'

DISPLAY SQLCODE

MOVE 16 TO RETURN-CODE

STOP RUN.

Capturando FILE STATUS

Muito comum em arquivos.


READ ARQCLIENTE

IF WS-FS NOT = '00'

   DISPLAY 'ERRO LEITURA'

   DISPLAY WS-FS

END-IF

Captura de SQLCODE

Programas DB2.


EXEC SQL

   SELECT ...

END-EXEC

IF SQLCODE NOT = 0

   DISPLAY SQLCODE

END-IF

Captura de CICS

Programas online.


EXEC CICS

   READ FILE(...)

   RESP(WS-RESP)

END-EXEC

IF WS-RESP NOT = DFHRESP(NORMAL)

   DISPLAY WS-RESP

END-IF

Uso de Declaratives

COBOL possui tratamento nativo.


DECLARATIVES.

ARQ-ERROR SECTION.

USE AFTER STANDARD ERROR PROCEDURE
ON ARQCLIENTE.

DISPLAY 'ERRO ARQUIVO'.

END DECLARATIVES.

LE Condition Handler

No ambiente IBM Language Environment (LE).


Pode interceptar:

S0C7
S0C4
Overflow
Underflow

Ferramentas modernas utilizam LE para coletar:

  • Call Stack

  • Variáveis

  • Offset

  • PSW


Ferramentas Comerciais


IBM Fault Analyzer

Uma das mais utilizadas.

Captura automaticamente:

  • ABEND

  • Variáveis

  • Fonte COBOL

  • Call Stack


IBM Application Performance Analyzer

Auxilia análise de execução.


Abend-AID

Muito popular em bancos.

Produz relatórios detalhados.


Xpediter

Debug e análise de falhas.


Exemplo Fault Analyzer

Após um S0C7:

ABEND S0C7

PROGRAMA:
FIN001

PARAGRAFO:
CALCULA-PARCELA

CAMPO:
WS-VALOR

CONTEUDO:
ABC123

Exemplo Abend-AID

Mostra:

Linha COBOL

Variáveis

Offsets

Call Stack

Storage

Captura Manual (Estilo Bellacosa)

Uma prática comum é criar um copybook corporativo.


COPY LOGERRO.

Sempre que ocorrer erro:

PERFORM REGISTRA-ERRO

Grava:

Programa

Parágrafo

Usuário

Data

Hora

SQLCODE

File Status

Mensagem

Exemplo de Log

PROGRAMA=FIN001

PARAGRAFO=ATUALIZA-SALDO

SQLCODE=-911

USUARIO=BELLA01

DATA=20260801

HORA=14:35:21

Captura de Call Stack

Especialmente importante em:

CALL
CALL
CALL
CALL

Exemplo:

MAIN
 ↓
CALCULO
 ↓
JUROS
 ↓
VALIDA

Erro ocorreu em:

VALIDA

Captura de Dumps

Ferramentas analisam:

SYSUDUMP
SYSABEND
CEEDUMP

CEEDUMP

Muito usado com Language Environment.

Contém:

  • variáveis;

  • registradores;

  • call stack;

  • offsets.


Boas Práticas

✅ Sempre verificar FILE STATUS

✅ Sempre verificar SQLCODE

✅ Tratar RESP em CICS

✅ Gerar logs padronizados

✅ Produzir CEEDUMP

✅ Utilizar Fault Analyzer ou Abend-AID

✅ Registrar contexto do erro


Curiosidade

Em muitos bancos, mais de 90% dos incidentes COBOL são resolvidos sem abrir um dump completo porque as rotinas de Bug Trap já registram:

Programa
Parágrafo
Campo
Valor inválido
Usuário
Transação

permitindo localizar a causa raiz em poucos minutos.


Resumo Rápido

ConceitoFunção
ABENDFinalização anormal
S0C7Erro numérico
S0C4Violação memória
Bug TrapCaptura contexto do erro
CEEDUMPDump do LE
SYSUDUMPDump sistema
SQLCODEErro DB2
FILE STATUSErro arquivo
RESPErro CICS
Fault AnalyzerDiagnóstico IBM
Abend-AIDDiagnóstico avançado
XpediterDebug

Conclusão

Bug Trap é o conjunto de técnicas e ferramentas utilizadas para capturar informações detalhadas antes ou durante um ABEND. Em ambientes COBOL corporativos, ele é essencial para acelerar a análise de incidentes, identificar a causa raiz e reduzir drasticamente o tempo de diagnóstico de erros em aplicações Batch, CICS, IMS e DB2.