können Sie die StackTrace
und StackFrame
Klassen verwenden. Sie können entweder eine ganze Stack-Ablaufverfolgung abrufen, indem Sie den StrackTrace
-Konstruktor aufrufen, oder nur einen bestimmten Stack-Frame, der den StackFrame
-Konstruktor verwendet, der die Anzahl der zu überspringenden Frames annimmt.
Sie sollten sich bewusst sein, dass es aufgrund von Inlining ungenau sein kann. (e..g Methode A Inline-Methode B, die Ihre Methode aufruft - Methode A wird gemeldet, nicht B).
Beispielcode:
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();
}
}
Lauf als optimierte Release-Build, wird diese Void Main()
drucken - wenn ein Debug-Build ausgeführt wird, oder wenn Sie mehr Code in die Intermediate()
Methode setzen, wird es Void Intermediate()
drucken.
(Wie in den Kommentaren erwähnt, wird dies auch eine Performance-Einbußen erstellen Sie sollen es messen, um zu sehen, ob es in Ihrem speziellen Fall akzeptabel ist..)
So viele gute Antworten, alle Dank! – nik