【发布时间】:2011-02-27 21:03:17
【问题描述】:
在我之前的问题之后,我想转储堆栈中的所有变量(从当前帧和所有前一帧),可以在这里看到:Is there a way to examine the stack variables at runtime in C#?
有人建议我手动拦截调用或使用 PostSharp 之类的 AOP 框架来简化此类任务。我查看了 PostSharp,拦截参数不包括当前堆栈帧中的变量。我想知道是否有一种简单的方法可以自动获取当前堆栈帧中的所有局部变量。我想我可以执行代码分析并生成将所有这些值复制到集合中的代码,但也许有一个内置机制可以做到这一点。
提前感谢您的任何建议。
编辑:我应该详细说明我为什么要这样做。我希望能够在方法中间暂停执行。如果我有堆栈的内容,我可以稍后恢复执行,甚至可以将其序列化并在另一台机器上继续执行(假设它是相对简单的代码,因此没有线程或 I/O)。运行一个代码分析工具是可以的,它允许我自动生成额外的代码来保存这个状态。我想我可能必须分析 CIL 才能做到这一点。
【问题讨论】:
-
祝你目标顺利。我建议阅读 .Net 中垃圾收集的详细信息 - 它确实暂停托管代码的执行并使用方法的数据进行操作。 (搜索“insde .net 垃圾收集”之类的内容开始)
标签: c# .net debugging cil stack-frame