【发布时间】:2014-02-12 18:27:32
【问题描述】:
我想提供一些有用的消息来调试特定异常,为此我需要访问堆栈中方法的所有类的实例。
我们以下面的代码为例。假设我有以下课程:
Public Class Foo
Public Name As String
Public Sub DoStuff(Optional N As Integer = 10)
If N = 0 Then Throw New Exception("Boom")
Dim C As New Foo
C.Name = "Class level = " & N
C.DoStuff(N - 1)
End Sub
End Class
会引发异常。我要做的是捕获堆栈中所有 Foo 实例的 Name 值。
Try
Dim C As New Foo
C.Name = "Base class"
C.DoStuff()
Catch ex As Exception
Dim St As New StackTrace(ex)
For i As Integer = 0 To St.FrameCount - 1
Dim M = St.GetFrame(i).GetMethod()
Console.WriteLine(M.Name & " " & M.DeclaringType.ToString)
Next
End Try
我差不多就是这些了,我可以在调用堆栈中获取类的方法和类型,但是我缺少的是能够获取实际实例以便能够访问每个字段的名称堆栈中的类 Foo。
这可能吗?
谢谢 查尔斯
【问题讨论】:
-
如果您尝试在 IDE 中调试类似的东西,
System.Diagnostics.DebuggerDisplayAttribute可能会有用。 -
谢谢。不过,那将在 Visual Studio 之外。这是一种类似excel的软件。我可以很容易地发现循环引用,这会产生异常。我要做的是帮助用户通过计算树堆栈找到循环引用是什么。