Tengo un código C # normal. Tengo sin excepciones . Quiero registrar mediante programación el seguimiento de la pila actual para fines de depuración. Ejemplo:
public void executeMethod()
{
logStackTrace();
method();
}
c#
.net
logging
stack-trace
printstacktrace
Ricibald
fuente
fuente
StackTrace
es lento , así que úselo con moderación.Una alternativa
System.Diagnostics.StackTrace
es utilizar 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.fuente
Environment.StackTrace
solo nuevo es una instancia deStackTrace
.System.Environment.StackTrace
podría ser una forma más conveniente de acceder a esa información.System.Diagnostics.StackTrace
- ver msdn.microsoft.com/en-us/library/…Environment.StackTrace
siempre comienzaat System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? Eso no es parte del seguimiento de la pila actual, ya que alguien lo está buscando.Hay dos maneras de hacer esto. El
System.Diagnostics.StackTrace()
le dará un seguimiento de la pila para el hilo actual. Si tiene una referencia a unaThread
instancia, puede obtener el seguimiento de la pila a través de la versión sobrecargada deStackTrace()
.También es posible que desee consultar la pregunta de desbordamiento de pila ¿ Cómo obtener el stacktrace de subprocesos no actuales? .
fuente
También puede hacer esto en el depurador de Visual Studio sin modificar el código.
Por supuesto, esto no ayuda si está ejecutando el código en una máquina diferente, pero puede ser bastante útil poder escupir un seguimiento de la pila automáticamente sin afectar el código de lanzamiento o incluso sin necesidad de reiniciar el programa.
fuente
La salida será similar a:
Reemplace
Console.WriteLine
con suLog
método. En realidad, no es necesario.ToString()
el caso Console.WriteLine como lo aceptaobject
. Pero es posible que lo necesite para su método Log (string msg).fuente
Parece funcionar para mi
fuente