quarta-feira, 4 de abril de 2007

Tratamento de erros: Objeto Exception parte 1

Vou explicar nesse e nos próximos artigos como funciona o tratamento de erros em aplicações .Net. Vou explicar o funcionamento do tratamento estruturado de exceções, o objeto Exception e como criar suas próprias exceções.

O .Net adotou o modelo de tratamento de erros estruturado, através de objetos representando os erros ocorridos, já utilizado em outras linguagens orientadas a objeto, como Delphi e Java.

Nesse primeiro artigo vou explicar o objeto Exception e como utilizá-lo para obter as informações necessárias a respeito do Erro. Nos próximos artigos tratarei outros aspectos do tratamento de erros, como a propagação do erro na hierarquia de chamada (se não entendeu, tudo bem, vou explicar depois) e a criação de suas próprias exceções.

Para capturar o erro de um código, coloque o código que deseja tratar dentro de uma estrutura try..catch, como mostrado no exemplo abaixo:

try
{
// Código que pode gerar o erro
}
catch(Exception ex)
{
// Aqui você pode tratar o erro com o objeto ex
MostrarMensagem(ex.Message);
}

No exemplo acima, se ocorrer algum erro entre o try e o catch, esse erro será tratado no bloco catch. Note que a propriedade Message do objeto ex é acessada para obter a mensagem de erro. Existem outras propriedades no objeto Exception que podem ajudar na correção do erro. Cito aqui as mais importantes:

Message
A mesma mensagem de erro que é exibida quando o erro não é tratado.

Source
A Fonte do Erro. Normalmente indica a biblioteca ou componente que gerou o erro.

StackTrace
Mostra a pilha de chamadas até o local do erro. É muito útil para encontrar o local do erro. Vai conter um texto com várias linhas como o texto abaixo:

at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider)
at System.Int32.Parse(String s) at System.Convert.ToInt32(String value)
at MyApp.Form1.btn1_Click(Object sender, EventArgs e)
in C:\Projetos\form1.cs:line 194
(São 4 linhas , a última quebrou por causa do tamanho disponível no blog).

A melhor maneira de ler essa lista é do fim para o início. No exemplo acima, você consegue indentificar que o processo começou no evento onclick do botão btn1 que, por sua vez, chamou, na linha 194 o método System.Convert.ToInt32, que chamou o System.Int32.Parse e assim por diante.

Capturando o erro, você poderia tratá-lo de uma maneira mais adequada, por exemplo, mostrando uma mensagem padrão para o usuário e gravando em um arquivo de log a mensagem de erro real e o StackTrace.

No próximo post irei falar mais do objeto Exception, explicando a estrutura de herança e como obter informações mais detalhadas sobre certos tipos de erro.

2 comentários:

elciok disse...

Putz, o negócio é uma cópia descarada de Java

Márlon disse...

Pior que é verdade. Mas pelo menos é muito melhor que On Error Goto...