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

标签 c# debugging stack stack-trace callstack

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

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

最佳答案

我想有两种方法可以实现这一目标。

您的第一个选择是使用 AOP 框架在编译后步骤中注入(inject)检测代码。这可以精确定位,让您几乎可以做任何您想做的事情,但是当您可以将所需的额外行为与代码的其余部分隔离开时效果最好。 PostSharp 是该领域的主要竞争者,但我相信还有其他竞争者。

您的第二个选择是连接到探查器 API,这是 TypeMock Isolator 和 Microsoft 自己的 Moles 所做的。它基本上为您提供了拦截所有内容的方法,但它具有很强的程序侵入性,而且实现起来肯定不是一项微不足道的任务。事实上,我不会向任何人推荐这种方法,除非为了完整性而提及它。

关于c# - 有没有办法在 C# 中的运行时检查堆栈变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130414/

相关文章:

c# - ComboBox 的值加倍 c#

c - 迭代 int 指针时破坏堆栈

c++ - 我无法在 Code::blocks IDE 上运行此代码,但可以在网上正常运行...!! 谁能告诉我应该进行哪些修改才能使其在 IDE 上运行?

c# - 如何在 xaml 中使用 List<T>?

c# - C# 中的简单 XML 读取不起作用

c# - 如何在 WPF 中更改 ViewPort3D 背景颜色?

php - 引用 - 这个错误在 PHP 中意味着什么?

c# - 如何调试 ManualReset 和 AutoReset 事件?

java - 调试时如何进入Android操作系统的源代码?

c - 撤消功能在达到游戏初始状态后无法正常工作