Reflexión en una excepción.

28/03/2006 - 13:29 por carlos | Informe spam
Hola a todos, estoy intentando hacer una clase para almacenar un log de
errores.
Tiene un metodo que sirve para escribir los errores con 3 parametros.
-El propio texto del error que sale de la parametro ex.message de la
excepcion
-Tipo de error (clasificacion de errores)
-tercero me gustaria que fuese la propia excepcion y asi poder recuperar
dentro del metodo el nombre del metodo que causó el error y el numero de
linea y tambien la clase.
No se si voy bien encaminado al intentar hacerlo mediante reflexion pero no
consigo obtener los datos que quiero almacenar.
He visto un clase que hace mas o menos lo que quiero StackTrace, pero me
suena haber visto esto mismo usando reflexion.
Gracias.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
28/03/2006 - 15:50 | Informe spam
Hola,

puedes usar StackTrace, aunque para eso, deberías usar el fichero pdb de
depuración.

Si distribuyes tu aplicación sin ese fichero, no podrás recuperar
determinados datos como la línea de código dónde se produce el error o
detalles parecidos.

Mira StackTrace.ToString() para ver lo que te devuelve la excepción.

Espero que esto te ayude.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"carlos" wrote:

Hola a todos, estoy intentando hacer una clase para almacenar un log de
errores.
Tiene un metodo que sirve para escribir los errores con 3 parametros.
-El propio texto del error que sale de la parametro ex.message de la
excepcion
-Tipo de error (clasificacion de errores)
-tercero me gustaria que fuese la propia excepcion y asi poder recuperar
dentro del metodo el nombre del metodo que causó el error y el numero de
linea y tambien la clase.
No se si voy bien encaminado al intentar hacerlo mediante reflexion pero no
consigo obtener los datos que quiero almacenar.
He visto un clase que hace mas o menos lo que quiero StackTrace, pero me
suena haber visto esto mismo usando reflexion.
Gracias.

Respuesta Responder a este mensaje
#2 carlos
28/03/2006 - 16:22 | Informe spam
Gracias por contestar Jorge pero si hago lo que me dices en el metodo
Public Sub ErrorNuevo(ByVal TipoError As TipoError, ByVal Cadena As String,
ByRef ex As Exception)

StackTrace(donde tomo el valor) toma el valor de ErrorNuevo (Nombre del
metodo que donde se ejecuta)
No hay otra manera para saber donde se genera???



"Jorge Serrano [MVP VB]" wrote:

Hola,

puedes usar StackTrace, aunque para eso, deberías usar el fichero pdb de
depuración.

Si distribuyes tu aplicación sin ese fichero, no podrás recuperar
determinados datos como la línea de código dónde se produce el error o
detalles parecidos.

Mira StackTrace.ToString() para ver lo que te devuelve la excepción.

Espero que esto te ayude.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"carlos" wrote:

> Hola a todos, estoy intentando hacer una clase para almacenar un log de
> errores.
> Tiene un metodo que sirve para escribir los errores con 3 parametros.
> -El propio texto del error que sale de la parametro ex.message de la
> excepcion
> -Tipo de error (clasificacion de errores)
> -tercero me gustaria que fuese la propia excepcion y asi poder recuperar
> dentro del metodo el nombre del metodo que causó el error y el numero de
> linea y tambien la clase.
> No se si voy bien encaminado al intentar hacerlo mediante reflexion pero no
> consigo obtener los datos que quiero almacenar.
> He visto un clase que hace mas o menos lo que quiero StackTrace, pero me
> suena haber visto esto mismo usando reflexion.
> Gracias.
>
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
28/03/2006 - 17:28 | Informe spam
La propiedad TargetSite de Exception te devuelve un MethodBase
correspodiente al metodo donde se genero la excepcion. Si quieres mas
informacion deberas usar StackTrace.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 tatis
29/03/2006 - 15:47 | Informe spam
#region ExceptionToString

/// <summary>
/// Convierte una excepción en una cadena de caracteres que la
representa.
/// </summary>
/// <param name="ex"><see cref="T:System.Exception"/> donde se
encuentran los datos de la excepción.</param>
/// <returns>Cadena de caracteres con la información descriptiva de la
excepción.</returns>
public static string ExceptionToString(Exception ex)
{
StringBuilder m_text = new StringBuilder();
m_text.Append(String.Format("Tipo:{0} ", ex.GetType().FullName +
Environment.NewLine));

PropertyInfo[] props = ex.GetType().GetProperties(BindingFlags.Public
| BindingFlags.Instance);

foreach(PropertyInfo prop in props)
{
m_text.Append(prop.Name + ": " +
Convert.ToString(prop.GetValue(ex,null)) + Environment.NewLine);
}

if (ex.InnerException != null)
{
m_text.Append("Interior: " + ExceptionToString(ex));
}

return m_text.ToString();
}

#endregion
Respuesta Responder a este mensaje
#5 Jorge Serrano [MVP VB]
30/03/2006 - 00:06 | Informe spam
Hola Carlos,

captura el objeto de la excepción y trata el StackTrace.

Ahora mismo no tengo delante el Visual Studio. Mañana si tengo un momento te
envío un pequeñísimo ejemplo que te ayude.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"carlos" wrote:

Gracias por contestar Jorge pero si hago lo que me dices en el metodo
Public Sub ErrorNuevo(ByVal TipoError As TipoError, ByVal Cadena As String,
ByRef ex As Exception)

StackTrace(donde tomo el valor) toma el valor de ErrorNuevo (Nombre del
metodo que donde se ejecuta)
No hay otra manera para saber donde se genera???



"Jorge Serrano [MVP VB]" wrote:

> Hola,
>
> puedes usar StackTrace, aunque para eso, deberías usar el fichero pdb de
> depuración.
>
> Si distribuyes tu aplicación sin ese fichero, no podrás recuperar
> determinados datos como la línea de código dónde se produce el error o
> detalles parecidos.
>
> Mira StackTrace.ToString() para ver lo que te devuelve la excepción.
>
> Espero que esto te ayude.
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "carlos" wrote:
>
> > Hola a todos, estoy intentando hacer una clase para almacenar un log de
> > errores.
> > Tiene un metodo que sirve para escribir los errores con 3 parametros.
> > -El propio texto del error que sale de la parametro ex.message de la
> > excepcion
> > -Tipo de error (clasificacion de errores)
> > -tercero me gustaria que fuese la propia excepcion y asi poder recuperar
> > dentro del metodo el nombre del metodo que causó el error y el numero de
> > linea y tambien la clase.
> > No se si voy bien encaminado al intentar hacerlo mediante reflexion pero no
> > consigo obtener los datos que quiero almacenar.
> > He visto un clase que hace mas o menos lo que quiero StackTrace, pero me
> > suena haber visto esto mismo usando reflexion.
> > Gracias.
> >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida