2009-02-10 9 views

Respuesta

279

Tener un vistazo a la System.Diagnostics espacio de nombres. Un montón de golosinas allí!

System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace(); 

Esto es realmente bueno tener un hurgar en aprender que hay de nuevo bajo el capó.

te recomiendo que usted tiene una mirada en soluciones de registro (como Nlog, log4net o los patrones y prácticas de Microsoft Enterprise Library) que pueden lograr sus propósitos y algo más. ¡Buena suerte compañero!

+45

Tenga en cuenta que 'StackTrace' es ** ** perro lento - a fin de utilizarlo con moderación. –

36

Hay dos maneras de hacer esto. El System.Diagnostics.StackTrace() le dará un seguimiento de pila para el hilo actual. Si tiene una referencia a una instancia Thread, puede obtener el seguimiento de pila a través de la versión sobrecargada de StackTrace().

Quizá le interese consultar la pregunta sobre el desbordamiento de la pila How to get non-current thread's stacktrace?.

163

Una alternativa a System.Diagnostics.StackTrace es usar System.Environment.StackTrace que devuelve una representación de cadena de stacktrace.

Otra opción útil es utilizar el tiempo de ejecución y $CALLER$CALLSTACKdebugging variables in Visual Studio ya que este se puede activar sin volver a generar la aplicación.

+3

'Environment.StackTrace' acaba de aparecer una instancia de' StackTrace'. – Daniel

+5

@Daniel: Sí, pero 'System.Environment.StackTrace' podría ser una forma más conveniente de acceder a esa información. – larsmoa

+1

Es cierto. Pero si necesita saltear un marco u omitir información de archivo, tendrá que usar 'StackTrace' directamente. – Daniel

10

También puede hacer esto en el depurador de Visual Studio sin modificar el código.

  1. Cree un punto de interrupción donde desee ver el seguimiento de la pila.
  2. Haga clic con el botón derecho en el punto de interrupción y seleccione "Acciones ..." en VS2015. En VS2010, seleccione "Cuando aparezca ...", luego active "Imprimir un mensaje".
  3. Asegúrese de que esté seleccionado "Continuar ejecución".
  4. Escriba el texto que desea imprimir.
  5. Agregue $ CALLSTACK donde desee ver el seguimiento de la pila.
  6. Ejecute el programa en el depurador.

Por supuesto, esto no ayuda si está ejecutando el código en una máquina diferente, pero puede ser bastante útil para poder escinde un seguimiento de la pila automáticamente sin afectar el código de versión o sin necesidad para reiniciar el programa

+0

Si desea ver un seguimiento de pila y ya está en el depurador VS en un punto de interrupción, simplemente vaya a Depurar-> Windows-> Pila de llamadas. – khargoosh

+3

Sí, pero si lo haces de esta manera, el programa no tiene que detenerse para que veas el seguimiento de la pila. –

Cuestiones relacionadas