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:
Putz, o negócio é uma cópia descarada de Java
Pior que é verdade. Mas pelo menos é muito melhor que On Error Goto...
Postar um comentário