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

时间:2011-02-26 23:25:24

标签: c# debugging stack stack-trace callstack

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

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

1 个答案:

答案 0 :(得分:1)

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

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

你的第二个选择是挂钩探测器API,这是TypeMock Isolator和微软自己的Moles所做的。它基本上为您提供了拦截所有内容的方法,但它具有很强的程序性,并且实现起来并不是一项简单的任务。事实上,我不建议任何人使用这种方法,除非提及它的完整性。