2010-03-03 12 views
8

Cuando se muestra Excepción (o más en general, cuando se convierte en Cadena) se muestra el seguimiento de la pila. Lo que quiero hacer es cambiar el formato de las rutas de archivos del código fuente que se muestran en dicha traza.¿Cómo formatear el rastro de la pila de Exception en C#?

Específicamente, me gustaría dejar solo los nombres de los archivos (sin la ruta completa) o mostrar solo la parte de la ruta que comienza con el directorio base del proyecto. Los caminos completos generalmente son innecesarios y desordenan todo el mensaje.

¿Cómo puedo hacer eso?

Respuesta

23

Hice una pregunta similar, aunque no del todo la misma, aquí: Print stack trace information in C#.

Lo que puede hacer es lo siguiente:

var trace = new System.Diagnostics.StackTrace(exception); 

que le da un objeto StackTrace que le da toda la información que necesita. En mi caso, se trató de evitar tener que lidiar con textos de excepciones localizadas, pero me imagino que puede usar el mismo enfoque para sus necesidades.


Editar: Tomo nota de que he añadido un comentario en el accepted answer a mi pregunta relacionada con un parámetro "needFileInfo" al constructor. Veo este constructor aquí: StackTrace(Exception e, bool fNeedFileInfo), no puedo encontrar el código real en cuestión en este momento pero supongo que debe pasar true a ese argumento. Creo que la experimentación es la clave aquí.

En otras palabras, supongo que el código debe ser la siguiente:

var trace = new System.Diagnostics.StackTrace(exception, true); 
+1

+1 buen consejo sobre la clase StackTrace. ¡Nunca supe que podría tomar una excepción como parámetro de constructor! – Josh

+0

¿Cómo es esto diferente de 'exception.StackTrace'? –

+4

Exception.StackTrace es una cadena, esta es una clase que proporciona acceso programático a las partes del seguimiento de la pila, incluidos nombres de archivos, números de líneas, nombres de clases, etc. en piezas, no como una sola cadena. –

2

Mira la clase System.Diagnostics.StackFrame y el método GetFileName. Puede escribir un método que obtenga el seguimiento de la pila y los nombres de los archivos de origen a los que puede llamar en su manejador de excepciones.

Cuestiones relacionadas