我在谈论托管的.NET代码。 如果我们运行任何程序并将VS附加到它,我们可以看到调用堆栈中每个方法的参数值。 我想创建一个日志记录解决方案,它将记录调用堆栈中每个方法的所有参数值。实际上,如果发生异常,我需要这些信息。

我知道可以通过分析API来实现。但我想知道只有托管代码才有可能吗?

更新:好的,可能使用纯.NET,这是不可能的。然后可能有某种非托管代码......重点是从应用程序本身内部执行此操作。在异常的情况下,应用程序可以调用某个库(可能是非托管的),它返回有关调用堆栈中方法值的信息。只是想一想......

有帮助吗?

解决方案

参数值不存储在StackFrame实例中。事实上,它们根本没有被记录/记录,除非您选择明确地进行记录/记录。

记录这些值的一种显而易见的方法是使用AOP。它肯定意味着成本,但结合日志框架和正确的日志级别,它可能是一种替代方案。您还可以选择仅对基本代码中的某些类型/方法进行检测,其中更可能抛出异常。我可能会选择Postsharp作为其静态编织功能,以发出日志调用。

无论如何,它远不是一个理想的解决方案,但是如果你被困在管理世界中,我担心你没有多少选择。

其他提示

您最好的选择可能是在相关方法中插入所需的跟踪代码。这样,您可以在需要时附加跟踪侦听器和转储值。

我知道这不是你所要求的,但它是获取数据的一种方式。

或者,您可以使用WinDbg调试应用程序。 !clstack /!dso命令可以让你检查参数和堆栈对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top