gpt4 book ai didi

c# - 有没有一种简单的方法来获取C#(或CIL)中当前堆栈帧中的所有局部变量

转载 作者:太空狗 更新时间:2023-10-29 18:21:02 24 4
gpt4 key购买 nike

根据我之前的问题,我想转储堆栈中的所有变量(来自当前帧和所有前一帧),可以在这里看到:Is there a way to examine the stack variables at runtime in C#?

有人建议我手动拦截调用或使用像 PostSharp 这样的 AOP 框架来简化这样的任务。我查看了 PostSharp,拦截参数不包括当前堆栈帧中的变量。想知道有没有简单的方法可以自动获取当前栈帧中的所有局部变量。我想我可以执行代码分析并生成将所有这些值复制到一个集合中的代码,但也许有一个内置机制可以做到这一点。

提前感谢您的任何建议。

编辑:我应该更详细地说明我为什么要这样做。我希望能够在方法中间暂停执行。如果我有堆栈的内容,我可以稍后恢复执行,或者甚至序列化它并在另一台机器上继续它(假设它是相对简单的代码,例如没有线程或 I/O)。可以运行一个代码分析工具,它可以让我自动生成额外的代码来保存这个状态。我想我可能必须分析 CIL 才能做到这一点。

最佳答案

您应该使用调试 API 并从另一个进程调试您的程序。编写自己的托管调试器并非易事,但至少是实现既定目标的受支持方式。

据我所知,托管 .Net 框架中没有任何内容可用于收集有关方法局部变量的运行时状态的信息。

请注意,在很多情况下,局部变量的值不存在,这使得编写通用代码来处理它们变得复杂:

  • 方法可以被内联(局部变量将与调用方法合并)
  • 局部变量可以优化掉
  • 局部变量可以超出作用域并在方法结束前被垃圾回收。

关于c# - 有没有一种简单的方法来获取C#(或CIL)中当前堆栈帧中的所有局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com