我说的是托管 .NET 代码。
如果我们运行任何程序并将 VS 附加到它,我们可以在调用堆栈中看到每个方法的参数值。
我想创建一个日志记录解决方案,它将记录调用堆栈中每个方法的所有参数值。实际上我需要这个信息以防发生异常。
我知道可以使用分析 API。但我想知道是否可以只使用托管代码?
更新:好的,可能使用纯 .NET 是不可能的。然后可能使用某种非托管代码......重点是从应用程序本身内部执行此操作。发生异常时的应用程序可以调用某个库(可能是非托管的),该库返回有关调用堆栈中方法值的信息。只是想法...
最佳答案
参数值不存储在 StackFrame 实例中。事实上,它们根本不会被记录/记录,除非您选择明确地这样做。
记录这些值的一种明显方法是使用 AOP。这当然意味着成本,但结合日志框架和正确的日志级别,它可能是另一种选择。您还可以选择仅检测基本代码中的某些类型/方法,在这些类型/方法中更有可能引发异常。我可能会选择 Postsharp,因为它具有静态编织功能,可以发出日志调用。
无论如何,这远不是一个理想的解决方案,但是如果您被困在托管世界中,恐怕您将没有很多选择。
关于.net - 是否可以在 .NET 的调用堆栈中获取每个帧的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/819576/