【问题标题】:How to get a class instance from a Method Base in a StackTrace如何从 StackTrace 中的方法库获取类实例
【发布时间】: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的软件。我可以很容易地发现循环引用,这会产生异常。我要做的是帮助用户通过计算树堆栈找到循环引用是什么。

标签: .net vb.net


【解决方案1】:

Is it possible to get parameters' values for each frame in call stack in .NET 的重复。

需要的是访问整个数据堆栈和堆 .NET 进程。我认为这并不容易(甚至可能)。推荐使用日志机制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 2013-01-13
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多