Puede utilizar los StackTrace
y StackFrame
clases. Puede obtener un seguimiento de pila completo llamando al constructor StrackTrace
, o solo un marco de pila particular utilizando el constructor StackFrame
, que toma el número de fotogramas para omitir.
Debe tener en cuenta que puede ser impreciso debido a la alineación. (e.g método A enlista el método B que llama a su método - se informará el método A, no B).
Código de ejemplo:
using System;
using System.Diagnostics;
class Test
{
static void ShowCaller()
{
// Use this code if you want multiple frames
// StackTrace trace = new StackTrace();
// StackFrame frame = trace.GetFrame(1);
// Use this code if you're only interested in one frame
StackFrame frame = new StackFrame(1);
Console.WriteLine(frame.GetMethod());
}
static void Intermediate()
{
ShowCaller();
}
static void Main()
{
Intermediate();
}
}
ejecuta como una versión de lanzamiento optimizado, esto imprimirá Void Main()
- cuando se ejecuta una versión de depuración, o si se pone más código en el método Intermediate()
, se imprimirá Void Intermediate()
.
(Como se mencionó en los comentarios, esto también crear un impacto en el rendimiento Se debe medir para ver si es aceptable en su caso particular..)
Tantas buenas respuestas, gracias todos! – nik