Bloco 01: Informações Gerais:
- Informações de Build;
- Nome do usuário e do computador onde ocorreu o erro;
- Data e Hora da geração do erro;
- Tipo do erro;
- Função onde aconteceu o erro;
- Nome do Fonte onde está localizada a função que gerou o erro;
- Data e Hora de compilação do fonte;
- Linha do fonte onde ocorreu o erro.
Bloco 02: Informações AppServer:
- Informações de Build;
- Plataforma do AppServer;
- Nome do Ambiente;
- Número da transação do AppServer (thread);
- Número de transação do Banco de dados (dbthread);
- Tipo de Banco de Dados utilizado;
- Tipo dos Local Files;
- Código da Empresa/Filia
- Usuário logado;
- Nome do Módulo.
- Objeto a qual pertence a função que está gerando o erro.
Bloco 03: Pilha de Chamada das Funções:
- Nome da Função;
- Nome do Fonte;
- Data e Hora compilação;
- Linha de execução do fonte.
Bloco 04: Variáveis em uso pelas Funções da Pilha de Chamada:
- Parâmetros dos objetos;
- Variáveis Públicas;
- Variáveis Locais;
- Variáveis Privates.
Bloco 05: Arquivos em Uso – Local Files e Tabelas:
- Nome do Arquivo;
- Tipo do RDD (Replaceable Database Driver);
- Alias;
- Filtro do Arquivo;
- Número do Registro (Recno);
- Total de Registros;
- Ordem do Arquivo (Índice selecionado);
- Campos dos registros posicionados;
- Dados dos Registros informados.
Apenas a geração de um único error.log, pode-se gerar milhares de linhas, isto porque, o Protheus trás o maior número de informações possíveis para análise.
Para cada função executada, o Protheus trás as respectivas variáveis em uso por função, além de trazer todos os Local Files, Tabelas e seus respectivos registros em uso, no momento em que é gerada a exceção de erro. Por isso, é gerada tantas linhas no arquivo de log.
A primeira vez que temos que analisar o error.log do Protheus, podemos ficar um pouco “assustado”, devido à enorme quantidade de informações geradas. Porém com o tempo, e sabendo “ler” o arquivo de erro.log corretamente, logo nos acostumamos.
Nas imagens abaixo, fazemos uma alusão da separação das informações do log por “Blocos”, conforme descrito acima:
Bloco 01 – Informações Gerais
Imagem 01 – Bloco 01 error.log – Smart Siga
Bloco 02 – Informações AppServer
Imagem 02 – Bloco 02 error.log – Smart Siga
Bloco 03 – Pilha de Chamada das Funções
Imagem 03 – Bloco 03 error.log – Smart Siga
Bloco 04 – Variáveis em uso pelas Funções da Pilha de Chamada
Imagem 04 – Bloco 02 error.log – Smart Siga
Bloco 05 – Arquivos em Uso – Local Files e Tabelas
Imagem 05 – Bloco 05 error.log – Smart Siga
No nosso exemplo, foi executada a função MATR260 (Relatório de Estoque Analítico), a qual chamou a função REPORTPRINT, que está comparando variáveis de tipos diferentes, gerando o error.log de “type mismatch on compare”.
Analisando as imagens, podemos verificar que o erro foi na linha 259, do fonte MATR260, conforme descrito no Bloco 01.
Depois, no Bloco 02, temos as informações referentes a Build, e as configurações do AppSever.
No Bloco 03 temos a Pilha de Chamadas de funções, a partir da função REPORTPRINT.
No Bloco 04, temos todas as variáveis em uso, separadas por função, da Pilha de Execução.
E para finalizar, no Bloco 05, temos todos os Local Files, Tabelas, e seus receptivos registros, os quais a função MATR260 estava posicionado e/ou em uso, no momento que ocorre o erro.
Esse tipo de erro “type mismatch on compare”, poderia ter sido, causado por um registro e/ou parâmetro cadastrado de forma errado, por exemplo, o qual deveria ser do tipo “numérico” e estava cadastrado com o tipo “string”.
Abaixo, listamos os erros mais comuns gerados no Protheus:
Array out of Bounds
Esse tipo de erro, ocorre quando a função tenta acessar diretamente um elemento de uma variável do tipo Array, e tal elemento não existe.
Array Index out of Bounds
Similar ao erro “Array out of Bounds”, tal exceção é gerada quando tentamos acessar uma posição de uma variável do tipo Array, que não existe.
Alias Already in Use
Esse erro ocorre, quando a função tenta abrir uma Tabela ou uma Query, que já está em uso na thread atual.
Alias Does Not Exist
Quando a função faz referência a uma Alias, e esse Alias não está “aberto” no momento da chamada, é retornado tal erro.
Argument X Error, Expected Z->Y, Function XPTO
Quando a função espera um parâmetro por exemplo do tipo “string” e é passado um parâmetro do tipo “numérico”, tal exceção de erro é gerada.
Type Mismatch on Compare On XPTO
Esse erro ocorre, quando a função tenta comparar, por exemplo, uma variável do tipo “string” com uma variável do tipo “numérica”, isto é, quando se tenta comprar variáveis com tipos de dados (escopos) diferentes.
Cannot Insert Duplicate Key
Essa exceção de erro, ocorre quando se tenta, incluir um registro “duplicado”, isto é, quando a função tenta incluir um registro exatamente igual, a outro registro já existente no Banco de Dados.
Nenhum comentário:
Postar um comentário