c# - Volcando la pila de llamadas programáticamente
.net debugging (4)
Buscando una manera de volcar programáticamente la pila de llamadas y una aplicación .net Win Forms cada vez que se golpea una sección de código. Es algo que no he encontrado antes pero me ahorrará tiempo de depuración.
Actualización: Olvidé agregar, cuánta sobrecarga esto agregaría a la aplicación, es decir, la desaceleraría considerablemente.
En realidad no ralentizaría su aplicación, ya que la información de la pila de llamadas no debe generarse, está presente durante todo el procesamiento de su código.
Puedes usar:
StackTrace callStack = new StackTrace();
Y para luego acceder a un marco de pila específico:
StackFrame frame = callStack.GetFrame(1);
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx
Desde MSDN:
using System.Diagnostics;
StackTrace st = new StackTrace(true);
for(int i =0; i< st.FrameCount; i++ )
{
// Note that high up the call stack, there is only
// one stack frame.
StackFrame sf = st.GetFrame(i);
Console.WriteLine();
Console.WriteLine("High up the call stack, Method: {0}",
sf.GetMethod());
Console.WriteLine("High up the call stack, Line Number: {0}",
sf.GetFileLineNumber());
}
System.Environment.StackTrace
Te dará la pila actual como una cadena.
También puede usar la clase StackTrace
como otros lo han señalado si tiene necesidades más avanzadas.