Import System.Diagnostics
Debug.WriteLine("Call Stack:")
Dim stackTrace As StackTrace = New StackTrace()
Dim stackFrames() As StackFrame = stackTrace.GetFrames()
For Each stackFrame As StackFrame In stackFrames
Debug.WriteLine(stackFrame.GetMethod().Name)
Next
4条答案
按热度按时间dldeef671#
Environment.StackTrace
为您提供了一个字符串,但有关更详细的信息和选项,请使用StackTrace
类。更具体地说,请查看构造函数选项:
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.stacktrace.aspx
如果您需要从调用者的帧开始的堆栈跟踪(例如,在日志函数中:你不想所有的东西都从
MyLogMethod
开始),你应该试试这个,它有一个int
参数,表示要跳过的帧数。http://msdn.microsoft.com/en-us/library/wybch8k4.aspx
如果您需要没有源代码信息的堆栈跟踪(例如,如果您不想泄露有关源代码的信息),请尝试以下方法:
http://msdn.microsoft.com/en-us/library/6zh7csxz.aspx
希望能有所帮助!
ssm49v7z2#
Environment.StackTrace
xriantvc3#
vybvopom4#
您还可以使用这些调用获取更多详细信息,例如
GetILOffset
、GetNativeOffset
或GetType
:参见https://www.csharp-examples.net/reflection-callstack/