Question:
I want to log the name of the method that called me. How do I do this in c#?How do I get the name of the caller method at a given execution point in dot.net?
Answer:
You can use the StackFrame and StackTrace objects.By default, a new StackFrame in a context is the current StackFrame
And the StackTrace gives you access to the caller hierarchy.
If you are in a debug build configuration you'll have all the information you want.
Attention! : In release mode (in prod) you'll have much less information and some method calls might have disappeared, due to compiler optimization.
Msdn says: "StackTrace might not report as many method calls as expected, because of code transformations that occur during optimization."
Here is an example
using System.Diagnostics; using System.Reflection; ... private void Call_GetTheCaller() { // call another method GetTheCaller(); } private void GetTheCaller() { StackFrame sFrame = new StackFrame(); MethodBase methodInfo = sFrame.GetMethod(); Console.WriteLine(methodInfo.Name); // writes : GetTheCaller StackTrace sTrace = new StackTrace(); StackFrame sFrame2 = sTrace.GetFrame(1); MethodBase methodInfo2 = sFrame2.GetMethod(); Console.WriteLine(methodInfo2.Name); // writes : Call_GetTheCaller } ...
No comments:
Post a Comment