有没有办法在C#中检查运行时的堆栈变量?

有没有办法在运行时转储堆栈的内容?

我对父函数信息(名称,参数,行)感兴趣,我知道我可以使用StackTrace和StackFrame类。 但是,我还想获取堆栈中的变量(在调用当前执行的方法中声明的局部变量)。 由于Visual Studio调试器可以执行此操作,我认为可能有一种方法也可以在运行时在代码中执行此操作。 有这样的方式吗?

我想有两种方法可以达到这个目的。

您的第一个选择是使用AOP框架将检测代码注入后编译步骤。 这可以很好地定位,并且可以让你做任何你想做的事情,但是当你可以将所需的其他行为与其余代码隔离开来时效果最好。 PostSharp是该领域的主要竞争者,但我确信还有其他竞争者。

你的第二个选择是挂钩探测器API,这是TypeMock Isolator和微软自己的Moles所做的。 它基本上为您提供了拦截所有内容的方法,但它具有很强的程序侵入性,当然也不是一项简单的任务。 事实上,我不会向任何人推荐这种方法,除非提及它的完整性。