¿Cómo imprimir el Stack Trace actual en .NET sin ninguna excepción?

Tengo un código regular de C #. No tengo excepciones Deseo registrar programáticamente el seguimiento de la stack actual para fines de depuración. Ejemplo:

public void executeMethod() { logStackTrace(); method(); } 

Eche un vistazo al espacio de nombres System.Diagnostics . Un montón de golosinas allí!

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

Esto es realmente bueno para hurgar en todo lo que sucede debajo del capó.

Le recomiendo que eche un vistazo a las soluciones de registro (como NLog, log4net o los patrones y prácticas de Microsoft Enterprise Library) que pueden lograr sus propósitos y más. ¡Buena suerte compañero!

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 usar las variables de depuración $CALLER y $CALLSTACK en Visual Studio, ya que esto se puede habilitar en tiempo de ejecución sin reconstruir la aplicación.

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

También es posible que desee ver la pregunta sobre el desbordamiento de la stack. ¿ Cómo obtener la stacktrace del hilo no actual? .

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

  1. Crea un punto de interrupción donde quieras ver el seguimiento de la stack.
  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 un texto que le gustaría imprimir.
  5. Agregue $ CALLSTACK donde desee ver el seguimiento de la stack.
  6. Ejecute el progtwig en el depurador.

Por supuesto, esto no ayuda si está ejecutando el código en una máquina diferente, pero puede ser muy útil para poder escupir un seguimiento de la stack automáticamente sin afectar el código de lanzamiento o sin siquiera tener que reiniciar el progtwig.

  private void ExceptionTest() { try { int j = 0; int i = 5; i = 1 / j; } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); var stList = ex.StackTrace.ToString().Split('\\'); Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]); } } 

Parece funcionar para mi