Saltar para o conteúdo principal
Versão: v18

Gestão de erros

O manejo de erros é o processo de antecipar e responder aos erros que possam ocorrer em sua aplicação. 4D oferece assistência completa à detecção e notificação de erros no tempo de execução, assim como a análise de suas condições.

Manejo de erros responde à duas necessidades principais:

  • descobrir e consertar erros potenciais e bugs no código durante a fase de desenvolvimento,
  • detectar e recuperar de erros inesperados nas aplicações implementadas; em particular pode substituir diálogos de erros de sistemas (disco cheio, arquivo faltando, etc) com sua própria interface.

    It is highly recommended to install an error-handling method on 4D Server, for all code running on the server. This method would avoid unexpected dialog boxes to be displayed on the server machine, and could log errors in a dedicated file for further analyses.

Instalação de um método de gestão de erros

In 4D, all errors can be catched and handled in a specific project method, the error-handling (or error-catching) method.

This project method is installed for the current process and will be automatically called for any error that occurs in the process, in interpreted or compiled mode. To install this project method, you just need to call the ON ERR CALL command with the project method name as parameter. Por exemplo:

ON ERR CALL("IO_ERRORS") //Instala o método de tratamento de erros

To stop catching errors and give back hand to 4D, call ON ERR CALL with an empty string:

ON ERR CALL("") //devolve o controlo a 4D

Alcance e componentes

Pode definir um único método de captura de erros para toda a aplicação ou diferentes métodos por módulo de aplicação. No entanto, somente um método pode ser instalado por processo.

An error-handling method installed by the ON ERR CALL command only applies to the running database. In the case of an error generated by a component, the ON ERR CALL error-handling method of the host database is not called, and vice versa.

The Method called on error command allows to know the name of the method installed by ON ERR CALL for the current process. It is particularly useful in the context of components because it enables you to temporarily change and then restore the host database error-catching method:

 $methCurrent:=Method called on error
ON ERR CALL("NewMethod")
//Se o documento não pouder ser aberto, um erro é gerado
$ref:=Open document("MyDocument")
//Reinstalação do método anterior
ON ERR CALL($methCurrent)

Manejo de erros dentro do método

Within the custom error method, you have access to several information that will help you identifying the error:

  • 4D automatically maintains a number of variables called system variables, meeting different needs (see the 4D Language Reference manual):

    • Error (inteiro longo): código de erro
    • Error method(texto): nome do método que provocou o erro
    • Error line (entero largo): número de línea do método que provocou o erro
    • Error formula (text): fórmula do código 4D (texto bruto) que está na origem do erro.
  • the GET LAST ERROR STACK command that returns information about the current stack of errors of the 4D application.

  • o comando Get call chain que devolve uma coleção de objetos que descrevem cada passo da string de chamadas a métodos dentro do processo atual.

Exemplo

Aqui está um sistema de gestão de erros simples:

//instalar o método de gestão de erros
ON ERR CALL("errorMethod")
//... executar o código
ON ERR CALL("") //retorna o controle para 4D
// método projeto errorMethod
If(Error#1006) //essa não é uma interrupção do usuário
ALERT("Um erro foi produzido "+String(Error)+". O código em questão é: \""+Error formula+"\"")
End if

Utilizar um método de gestão de erro vazio

Se quiser que a caixa de diálogo fique escondida, pode instalar um método de gestão de erros vazio. A variável sistema Error pode ser provada em qualquer método, ou seja, fora do método de gestão de erros:

ON ERR CALL("emptyMethod") //emptyMethod exists but is empty
$doc:=Open document( "myFile.txt")
If (Error=-43)
ALERT("File not found.")
End if
ON ERR CALL("")