是否可以在.NET中调用堆栈中的每个帧获取参数值

Shr*_*ike 11 .net clr diagnostics

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

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

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

Rom*_*ier 7

参数值不存储在StackFrame实例中.实际上,除非您选择明确地进行记录/记录,否则它们根本不会被记录/记录.

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

无论如何,它远不是一个理想的解决方案,但是如果你陷入管理世界,我担心你不会有很多选择.