Gestión de errores

C#
Autor: Dámaso Velázquez Álvarez

En muchas ocasiones es importante llevar una buena gestión de errores de nuestra aplicación.

En este artículo vamos a ver un ejemplo a la hora de desarrollar aplicaciones Windows Form. La idea es introducir el siguiente código en cada manejador de evento y cada método de nuestra aplicación, de tal forma que cuando se produzca un error no esperado, se enviará un informe por correo electrónico (por ejemplo, al responsable de la aplicación, para que pueda solucionar los problemas que la aplicación esté sufriendo).

En el ejemplo, vamos a ver el código que se usaría para gestionar los posibles errores a la hora de pulsar un botón llamado cmdEjemplo.

Inicialmente necesitaremos una clase llamada Email para poder enviar los informes de errores con el siguiente código:

using System;
using System.Net.Mail;
static class Email
{
   public static void sendEmail(String remitente, String destinatario, String asunto, String contenido)
   {
      MailMessage mensaje = new MailMessage("direccion_del_remitente", "direccion_del_destinatario");
      mensaje.IsBodyHtml = true;
      mensaje.Subject = asunto;
      mensaje.Body = contenido;
      mensaje.BodyEncoding = System.Text.Encoding.GetEncoding(1252);
      SmtpClient cliente_smtp;
      cliente_smtp = new SmtpClient("direccion_de_servidor_de_correo_smtp");
      cliente_smtp.Send(mensaje);
   }
}

y tendremos también una clase Errores, que llamaremos desde el catch de los manejadores de eventos y métodos de nuestra interfaz de usuario con el siguiente código:

using System;
static class Errores
{
   public static void setErrorInterfaz(Exception ex)
   {
      String informe;
      informe = "Informe de errores:\r\n";
      informe += "Mensaje de errror: " + ex.Message;
      informe += "\r\nAplicación que generó el error: " + ex.Source;
      informe += "\r\nPila de llamadas: " + ex.StackTrace;
      informe += "\r\nMétodo: " + ex.TargetSite;
      Email.sendEmail("direccion_de_remitente", "direccion_de_destinatario", "Informe de errores", informe);
   }
}

Como podemos observar, ambas clases son estáticas, para poder utilizarlas sin necesidad de instanciarlas.

El código del manejador del evento Click de nuestro botón quedaría asi:

private void cmdEjemplo_Click(object sender, EventArgs e)
{
   try
   {
      //Código asociado al evento Click del botón cmdEjemplo
   }
   catch (Exception ex)
   {
      Errores.setErrorInterfaz(ex);
   }
}

El informe de errores que recibiremos nos dará la siguiente información:
- Mensaje de error que emite el sistema
- Aplicación que generó el error
- Pila de llamadas
- Método (o manejador de evento) que generó el error