2012-09-25 21 views
7

¿Puedo arrojar algo de texto en el seguimiento de la pila?Escribir en stacktrace

Mi aplicación ya tiene un control sobre las excepciones lanzadas. Pero me gustaría tener más información sobre algunos métodos (parámetros).

La idea era hacer algo como

StackTrace.Insert (0, "argument:" + test); 

Sé que esto no es bueno, pero ¿es posible?

+0

¿Sería esto suficiente? 'throw new InvalidOperationException (" argument1: "+ test +", argument2: "+ test2);' –

+0

pero detendrá mi método, ¿no? –

+4

Podría ser la solución crear la excepción y poner los parámetros en [Propiedad del diccionario de datos] (http://msdn.microsoft.com/en-us/library/system.exception.data (v = vs.100) .aspx)? (Luego arroje la excepción ...) – erikH

Respuesta

13

Crear la excepción, y poner los parámetros en el Data dictionary property. A continuación, tirar la excepción ...

+1

Lo hice una respuesta ya que mi comentario fue votado como útil, y creo que es más una respuesta que un comentario. – erikH

+0

Muy agradable. La clave es lanzar esta nueva excepción creada, de lo contrario StackTrace no se completará. – puddinman13

2

Por definición, el seguimiento de pila es una salida de los marcos de pila activos en el punto de ejecución actual de un programa, al que generalmente se accede a través de una excepción.

@David Yaw le dio la forma correcta de agregar información adicional a un seguimiento de pila, ya que sube la pila de excepciones. Para reformular, solo debe agregar sus datos personalizados al seguimiento de pila, cuando es el resultado de una excepción.

Cree una recopilación de listas de acceso central para almacenar datos de registro, o use try/catch adecuado con excepción de burbujeo como recomienda David.

por ejemplo.

try 
{ 
    doSomethingThatMightFailAndThrowAnException(); 
} 
catch (Exception ex) 
{ 
    throw new Exception("Here is some custom data to add to the trace...",ex); 
    // Notice adding the ex as the second parameter preserves the original exception trace 
} 
5

Sólo para añadir a @ excelente respuesta de erikH:

Además de utilizar la propiedad Data, si necesita información adicional disponible en la cadena de excepción, puede hacerlo a través de una excepción personalizada. Además de la metainformación que un tipo personalizado puede proporcionar (un CommunicationException podría significar un problema con E/S, un InvalidStateException podría significar que el programa encontró un estado no válido, y así sucesivamente) puede agregar información adicional a la excepción en el forma de campos personalizados Los campos personalizados son especialmente útiles cuando necesita seguridad de tipos que la propiedad Data no proporciona.

Cuestiones relacionadas