| Bellacosa Mainframe apresenta o CALL em Cobol Pàrte III |
☕💥 A Jornada do Padawan COBOL – Parte 3
Desvendando o Universo dos CALLs no Mainframe
RETURN-CODE, GOBACK, Dumps, CEEDUMP, IPCS e os Segredos Jedi do Troubleshooting
Ou como descobrir que um simples S0C4 pode transformar uma madrugada tranquila em uma aventura digna de um RPG de nível 99
Por Vagner Bellacosa – Bellacosa Mainframe
O momento em que o Padawan encontra seu primeiro ABEND
Todo desenvolvedor Mainframe possui uma história.
Normalmente começa assim:
Segunda-feira.
02h47.
Janela de produção.
Telefone toca.
Gerente pergunta:
O batch das contas correntes caiu.
Você responde:
Qual erro?
Resposta:
S0C4.
Silêncio.
Você pega café.
Abre SDSF.
Começa a aventura.
O universo do RETURN-CODE
Uma das coisas mais elegantes do COBOL é a comunicação entre programas.
Nem tudo precisa explodir com um ABEND.
Podemos retornar informações.
Exemplo:
Programa Chamador
CALL 'VALIDA'
USING WS-CLIENTE
IF RETURN-CODE NOT = 0
DISPLAY "ERRO"
END-IF
Subprograma
IF CPF-INVALIDO
MOVE 8 TO RETURN-CODE
GOBACK
END-IF
Convenção mais utilizada
| RC | Significado |
|---|---|
| 0 | Sucesso |
| 4 | Aviso |
| 8 | Erro |
| 12 | Erro Grave |
| 16 | Fatal |
Exemplo elegante
Subprograma
EVALUATE TRUE
WHEN CLIENTE-INATIVO
MOVE 4 TO RETURN-CODE
WHEN CPF-INVALIDO
MOVE 8 TO RETURN-CODE
WHEN SALDO-NEGATIVO
MOVE 12 TO RETURN-CODE
WHEN OTHER
MOVE 0 TO RETURN-CODE
END-EVALUATE
Por que isso é importante?
Evita ABEND.
Permite tratamento.
Sistema continua vivo.
GOBACK vs EXIT PROGRAM
Padawan adora copiar.
Mestre entende diferença.
STOP RUN
STOP RUN
Finaliza tudo.
Acabou.
Batch morre.
GOBACK
GOBACK
Retorna.
Educado.
Seguro.
EXIT PROGRAM
Muito usado em subprogramas.
EXIT PROGRAM
Volta ao chamador.
O preferido da IBM
GOBACK
Sempre.
O grande vilão
S0C4
O Darth Vader dos ABENDS.
O que significa?
Violação de armazenamento.
Tentou acessar
memória inválida.
Exemplo
CALL 'ROTINA'
USING WS-NOME
ROTINA
espera
LK-NOME
LK-ID
LK-DATA
Recebe apenas um.
Kaboom.
Como ocorre
CPU acessa
endereço inexistente.
Exemplo
00000000
ou
FFFFFFFF
Crash.
S0C7
Outro inimigo.
Exemplo
Campo contém
ABC
Programa espera
999
Código
ADD 1 TO WS-VALOR
ABEND.
S806
Muito comum.
Programa não encontrado.
Verificar
STEPLIB
JOBLIB
LNKLST
APF
U4038
Erro do LE.
Language Environment.
Normalmente
problemas de parâmetros.
Heap.
Stack.
Storage.
O CEEDUMP
Ferramenta dos Mestres.
Poucos usam.
Deveriam usar.
Muito.
Compilar
TEST
ou
LIST
Executar
gera
CEEDUMP
Possui
Stack
Registers
Storage
Offsets
Variáveis
Call Stack
Exemplo
MAIN
↓
VALIDA
↓
CPFCHK
↓
FORMATA
↓
ABEND
Melhor que adivinhar.
IPCS
Ferramenta lendária.
Poucos dominam.
Permite
abrir dump.
Examinar memória.
Ver registradores.
Offsets.
TCB.
PSW.
O segredo do Offset
Mensagem
IGZ0035S
OFFSET X'01A2'
LISTING
0001A2 MOVE WS-ID
Achou erro.
Capturando problemas
Técnica Bellacosa 1
Log antes.
DISPLAY 'ENTRADA'
DISPLAY WS-ID
DISPLAY WS-NOME
Técnica 2
Log depois.
DISPLAY 'RETORNO'
Técnica 3
Interface versionada
05 LK-VERSAO.
PIC X(02).
Técnica 4
Validar ponteiros
IF PTR = NULL
DISPLAY 'ERRO'
END-IF
Técnica 5
Checksum
Estruturas críticas.
Técnica 6
Tamanho esperado
IF LENGTH OF LK-AREA
NOT = 256
Descobrindo loops
CALL
A
B
C
A
B
C
CPU
100%
Usar
SMF
RMF
Strobe
APA
Detectando corrupção
Antes
MOVE WS-BLOCO TO WS-BKP
Depois
Comparar.
IF WS-BKP
NOT = WS-BLOCO
Monitorando produção
SMF 30
SMF 110
RMF
Dica Bellacosa
Nunca faça:
MOVE 16 TO RETURN-CODE
CONTINUE
E ignore.
Faça
IF RETURN-CODE > 0
DISPLAY MSG
PERFORM LOG
END-IF
Easter Egg Mainframe
Existe em praticamente todos os bancos:
Programa
GENCALL
ou
UTIL0001
Possui:
7000 linhas.
300 CALLs.
120 IFs.
47 GO TO.
3 autores.
Última alteração:
Documentação:
Nenhuma.
Produção:
Executa há vinte anos.
Ninguém mexe.
É conhecido como:
O Boss Final do Mainframe™
Checklist Jedi de Troubleshooting
✅ Verificar RETURN-CODE
✅ Conferir parâmetros
✅ Conferir ordem
✅ Conferir tamanho
✅ Conferir LISTING
✅ Conferir CEEDUMP
✅ Conferir Offset
✅ Conferir STEPLIB
✅ Conferir Binder
✅ Conferir RENT
✅ Conferir Work-Storage
✅ Conferir Local-Storage
✅ Conferir ponteiros
✅ Conferir versão da interface
✅ Conferir quantidade de cafés consumidos
A Filosofia Jedi do CALL – Parte 3
O Padawan iniciante acredita:
"O programa caiu."
O desenvolvedor intermediário pensa:
"Preciso achar a linha."
O Mestre Mainframe sabe:
O programa nunca cai sozinho.
Ele deixa pistas.
Offsets.
PSW.
CEEDUMP.
Registers.
SMF.
IPCS.
RETURN-CODE.
Storage.
Call Stack.
E o verdadeiro Jedi do z/OS aprende que depurar um problema em produção não é apenas corrigir um bug.
É fazer arqueologia digital em sistemas que processam bilhões de transações por dia, compreender contratos invisíveis entre programas escritos ao longo de décadas e transformar um assustador S0C4 das 3 da manhã em apenas mais uma história para contar tomando um café no Bellacosa Mainframe.
Na Parte 4, o Padawan enfrentará o conteúdo avançado: Reentrância, RENT/NORENT, Thread Safety, HEAP, STACK, CICS, LE, AMODE 31/64, otimização extrema de CALLs, microbenchmarks e os segredos utilizados pelos arquitetos de sistemas IBM Z para executar milhões de chamadas por segundo com segurança.
Sem comentários:
Enviar um comentário