• Viernes 19 de Abril de 2024, 23:52

Autor Tema:  Excepcion, obtener el nombre de la clase del error  (Leído 3638 veces)

Dieguinho..

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Excepcion, obtener el nombre de la clase del error
« en: Jueves 25 de Febrero de 2010, 16:47 »
0
Hola!

les escribo por una duda que tengo.

En una aplcacion hay una clase que tiene un metodo que se encarga de realizar el manejo de errores (genera un txt).
A este metodo se le pasa la excepcion y de ahi se obtiene el metodo donde se genero el error, la descripcion del error, la linea del error, etc.
Lo unico que me faltaria obtener de esta excepcion es la clase en la cual se origina el error. Puedo sacar el metodo pero no la clase.

Por el momento se la paso como parametro del metodo, pero supongo que en algun lugar debe estar el dato que necesito, para no tener que hacerlo a mano
Les copio el codigo del metodo que utilizo (lo puse un poco mas prolijo para que se lea mejor)

saludos y espero puedan ayudarme!!

Citar
       public void GrabarError(Exception exp, string sNombreClase)
        {
            //Genera un log de errores.

            string sError;
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(exp, true);

            //Fecha
            sError = DateTime.Now.ToString() + " - "
            //Nombre de la clase
            sError+= sNombreClase + " - "
            //Nombre del metodo
            sError+= trace.GetFrame(trace.FrameCount - 1).GetMethod().Name;
            //Descripcion del error
            sError+=  " - Error: " + exp.Message.ToString();
            //Linea del error
            sError += " - Línea: " + trace.GetFrame(trace.FrameCount - 1).GetFileLineNumber().ToString();
            //Reemplaza los saltos de linea por espacios.
            sError = sError.Replace(Environment.NewLine, " ");

            /////luego se graba el archivo en un txt.
        }

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Excepcion, obtener el nombre de la clase del error
« Respuesta #1 en: Jueves 25 de Febrero de 2010, 23:58 »
0
exp.TargetSite.DeclaringType.Name;

ademas podes obtener el nombre del metodo que tiro el error haciendo: exp.TargetSite.ToString()

Dieguinho..

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: Excepcion, obtener el nombre de la clase del error
« Respuesta #2 en: Viernes 26 de Febrero de 2010, 19:35 »
0
Hola, antes que nada gracias por responderme.
Sabes que probe eso que me decias, inclusive lei la ayuda y efectivamente es como decis vos, es para saber el nombre de la clase y el metodo donde se genero la excepcion.
Pero no se por que no lo puedo aplicar.
cuando pongo exp.TargetSite.DeclarinType.Name me trae 'String' como valor.
y cuando pongo exp.TargetSite.ToString() trae 'System.String InternalSubStringWithChecks(Int32, Int32, Boolean)'

Este es un ejemplo que mas o menos muestra como ejecuto todo esto.
estare aplicando algo mal?

Citar
Clase Procesos
{
   try
   {
      ...
   }
   catch (Exception exp)
   {
      objClaseError.GrabarError(exp)
   }
}
Clase Error
{
   GrabarError(Exception exp)
   {
      string sError;
                  sError = exp.TargetSite.DeclaringType.Name;   (aca me devuelve la palabra "String")
                  sError = exp.TargetSite.ToString();      (aca me devuelve "System.String InternalSubStringWithChecks(Int32, Int32, Boolean)")
   }
}

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Excepcion, obtener el nombre de la clase del error
« Respuesta #3 en: Sábado 27 de Febrero de 2010, 04:28 »
0
Hola, hice una prueba con el siguiente codigo que se aproxima a lo que decis vos. Pues en comentario la salida.

Código: C#
  1.  
  2. internal static class Program
  3.     {
  4.         static void Main()
  5.         {
  6.             {
  7.                 try
  8.                 {
  9.                     new MyClass.MyAnotherClass().tirarError();
  10.                 }
  11.                 catch (Exception exp)
  12.                 {
  13.                     new GrabarError().Grabar(exp);
  14.                 }
  15.             }
  16.         }    
  17.  
  18.         internal class MyClass
  19.         {
  20.             internal class MyAnotherClass
  21.             {
  22.                 internal void tirarError()
  23.                 {
  24.                     throw new Exception();
  25.                 }
  26.             }
  27.         }
  28.  
  29.         class GrabarError
  30.         {
  31.             public void Grabar(Exception exp)
  32.             {
  33.                 string sError;
  34.                 sError = exp.TargetSite.DeclaringType.Name;
  35.                 // sError es MyAnotherClass
  36.  
  37.                 sError = exp.TargetSite.ToString();
  38.                 // sError es "Void tirarError()"
  39.             }
  40.         }
  41.     }
  42.  
  43.  

Si podes pone el codigo completo de lo que haces.

Tampoco descartes que "String" es el nombre de una clase y InternalSubStringWithChecks(Int32, Int32, Boolean) es el nombre de un metodo de esa clase.
Quizas quien tira la exception no es tu codigo sino codigo de .net.

Si podes pega el codido con los valores que pasas.

Saludos, espero que sirva. Daniel.