如何在.NET中正常执行时获得堆栈跟踪?

eit6fx6z  于 2023-01-22  发布在  .NET
关注(0)|答案(4)|浏览(123)

在VB.NET中,我知道我可以通过在处理异常时查看ex.StackTrace的值来获得堆栈跟踪。在不处理异常时,我如何获得堆栈上的函数?我希望实现某种日志记录系统,以记录用户在崩溃之前所采取的步骤,从而帮助调试。

dldeef67

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
希望能有所帮助!

xriantvc

xriantvc3#

System.Environment.StackTrace
vybvopom

vybvopom4#

您还可以使用这些调用获取更多详细信息,例如GetILOffsetGetNativeOffsetGetType

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

参见https://www.csharp-examples.net/reflection-callstack/

相关问题