有没有一种方法可以在运行时转储堆栈的内容?
我对父函数信息(名称、参数、行号)感兴趣,我知道可以使用StackTrace和StackFrame类获取这些信息。但是,我还想获取堆栈中的变量(在调用当前执行的方法的方法中声明的局部变量)。由于Visual Studio调试器可以做到这一点,我认为也可能有一种方法在代码内部在运行时实现它。是否存在这样的方法?
有没有一种方法可以在运行时转储堆栈的内容?
我对父函数信息(名称、参数、行号)感兴趣,我知道可以使用StackTrace和StackFrame类获取这些信息。但是,我还想获取堆栈中的变量(在调用当前执行的方法的方法中声明的局部变量)。由于Visual Studio调试器可以做到这一点,我认为也可能有一种方法在代码内部在运行时实现它。是否存在这样的方法?
我认为有两种方法可以实现这个目标。
第一种选择是使用AOP框架作为后编译步骤注入仪器代码。这可以精细定位并让您几乎做任何想做的事情,但最好在能够将所需的附加行为与其余代码隔离开来时使用。PostSharp是该领域的领先竞争者,但我相信还有其他选择。
第二种选择是钩入分析器API,这就是TypeMock Isolator和Microsoft自己的Moles所做的。它基本上为您提供了拦截所有内容的手段,但它对程序的侵入性很大,而且肯定不是一个简单的任务来实现。实际上,除了提及它的完整性外,我不建议任何人采用这种方法。