如果出现未处理的异常,如何打印所有局部和全局变量?

时间:2019-05-23 19:23:43

标签: vb.net debugging logging reflection

作为vb.net应用程序日志系统的一部分,我正在开发中,如果出现未处理的异常(“应用程序事件”中为MyApplication_UnhandledException调用),我想转储每个类中每个全局变量的名称和值,并且导致异常的函数/子的本地变量到本地.log文件,客户端可以将其发送回给我进行调试。我知道这必须通过反思来完成,但是我不知道该怎么做。我之所以需要它,是因为Stack Trace(我也将其转储到日志文件中)不存储函数参数的值,也不存储全局变量的值。

这是我用于全局变量的部分:

    Dim assbly As Assembly = [Assembly].GetExecutingAssembly()
    Dim types As Type() = assbly.GetTypes()

    For Each t As Type In types
        For Each p As FieldInfo In t.GetFields()
            Logger.addToLog(p.Name & "  - " & p.FieldType.Name) 'should also get value, maybe with p.getValue() ?
        Next
    Next

不幸的是,它只打印每个类的Public全局变量,而我也需要Private变量。另外,这不会打印值。 p.getValue()调用需要一个对象作为参数,但是我似乎无法理解应该给它什么。 至于局部变量,我还没有想出任何办法,我希望这里的人可能知道。我也觉得必须有一些更好的方法来实现我想要的。有人可以建议吗?

0 个答案:

没有答案