Depurando erros de execução

Introdução

Na computação há dois tipos de erros, os de compilação e execução.

  • Erros de compilação: São causados pela escrita incorreta da sintaxe da sua aplicação, por exemplo se você declarar uma variável chamada de temp e depois quando for se referir a ela escrever tep vai causar um erro de compilação: A variável tep não foi declarada, e a sua aplicação nem chega a rodar. Esses erros são muito mais facéis de se detectar em aplicações para desenvolvimento de software, pois quando o compilador gera o executável ele verifica toda a sintaxe, caso tenha algum erro ele nem compila. Já na web, com exeção do Java e outras, os arquivos são interpretados assim que solicitados, no Java como falei é possível compilar gerando os arquivos compilados do Java: .class.
  • Erros de execução: São causados quando você utiliza a comunicação da aplicação com algum dispositivo de hardware, como conexão com banco de dados em outro servidor, gravar arquivos, entre outros. Por exemplo, você vai tentar gravar um arquivo no HD e o sistema operacinal não permite, isso causará um erro de execução: Não foi possível gravar o arquivo. Esse tipo de erro é muito pior do que o de compilação, pois ele passa despercebido e quando o usuário final vai utilizar a aplicação ocorre o erro. Na web praticamente todos os erros são de execução, com exeção da linguagem Java e outras, pois quando você vai executar a aplicação é causado o erro.

Bloco protegido

É um recurso muito comum em várias linguagens de programação, que consiste em proteger certas partes do programa para que sejam tratados os erros de execução. O interpretador tenta executar o bloco protegido, caso ocorra um erro ele desvia o fluxo do processamento para o bloco de exceção onde executa operações que foram definidas pelo programador, por exemplo, exibe a mensagem para o usuário: Não foi possível concluir a operação.

Como evitar erros

Para você ter uma aplicação sem “erros”, você deve fazer uma seqüência de testes, testando todas as funcionalidades da sua aplicação. As vezes você testa a aplicação e acha que está perfeita, mas por exemplo, se você está utilizando permissões de usuário e testar a aplicação somente com o usuário root, ela pode funcionar, mas quando testar com outro usuário serão condições diferentes que poderão causar erros.

Para manter sua aplicação do ColdFusion funcionando corretamente, sempre utilize o bloco protegido em todos os comandos de sua página, pois aplicações para web podem causar erros de execução a qualquer momento, por diversos motivos.

Utilizando bloco protegido

<cftry>
Bloco que deseja proteger!
<cfcatch type=”any”>
Caso ocorra um erros de execução o fluxo de processamento é deviado para cá!
</cfcatch>
</cftry>

Identificando o local exato do erro

No ColdFusion, quando ocorre um erro e você utiliza o bloco protegido, as informações referentes ao erro são gravadas na estrutura cfcatch, agora veremos como exibir essas informações:

<cftry>
Bloco que deseja proteger!
<cfcatch type=”any”>
<cfinclude template=”erro.cfm“>
</cfcatch>
</cftry>

Criando o arquivo erro.cfm

<cfoutput>
Tipo do erro: #cfcatch.type#<br>
Mensagem de erro: #cfcatch.message#<br>
<cfloop index = 1 from = 1 to = #ArrayLen(cfcatch.tagcontext)#>
<strong>Erro #i#</strong><br><br>
Tag que ocorreu o erro: #cfcatch.tagcontext[i]["id"]#<br>
Linha que ocorreu o erro: #cfcatch.tagcontext[i]["line"]#<br>
Coluna que ocorreu o erro: #cfcatch.tagcontext[i]["column"]#<br>
Endereço do arquivo que contém o erro: #cfcatch.tagcontext[i]["template"]#<br><br><br>
</cfloop>
</cfoutput>

Considerações finais

Recomendo que vocês sempre utilizem o bloco protegido, principalmente quando usar recursos não dependem da linguagem, como acesso a arquivos que necessita da permissão do sistema operacional. Você pode ter vários blocos protegidos na sua aplicação inclusive um dentro do outro. No Java quando você vai fazer uma leitura de um arquivo ele requer que você utilize o bloco protegido, senão usar ele nem compila o programa.

Agora vou mostrar mais um exemplo para fixar bem a teoria:

<cfoutput>
<cftry>

<cfquery name=”exemplo” datasource=”ds”>
SELECT cliente.nome FROM cliente
<cfif IsDefined(“url.codigo”)>
WHERE cliente.nome = #url.codigo#
</cfif>
</cfquery>

<cfcatch type=”database”>
<strong>Ocorreu um erro de banco de dados!</strong>
</cfcatch>

</cftry>
</cfoutput>

Caso tenha alguma dúvida utilize o fórum.
Abraços, Renan Fretta – renan@mxstudio.com.br

Escrito por Renan Fretta on junho 25, 2005. Arquivado em Coldfusion. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>