5

有没有办法使用 .NET 反射来捕获所有参数/局部变量的值?

4

6 回答 6

3

您可以使用CLR 调试 API获取此信息,尽管提取它不是简单的几行代码。

于 2008-10-03T19:12:18.643 回答
2

反射不用于从堆栈中捕获信息。它读取大会。

您可能想看看 StackTrace

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

好文章在这里:

http://www.codeproject.com/KB/trace/customtracelistener.aspx

于 2008-10-03T19:10:12.657 回答
1

反射会告诉您方法具有的参数类型,但它不会帮助您在任何特定调用期间发现它们的值。反射根本不会告诉您有关局部变量的任何信息。

您需要调试器用来访问此类信息的那种 API。

于 2008-10-03T19:12:22.683 回答
0

我认为这是不可能的,您可以通过查看 StackTrace 来获取方法及其参数。

System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(true);
for (Int32 frameCount = 0; frameCount < sTrace.FrameCount; frameCount++){ 
     System.Diagnostics.StackFrame sFrame = sTrace.GetFrame(frameCount);
     System.Reflection.MethodBase thisMethod = sFrame.GetMethod();
     if (thisMethod == currentMethod){
          if (frameCount + 1 <= sTrace.FrameCount){
               System.Diagnostics.StackFrame prevFrame = sTrace.GetFrame(frameCount + 1);
               System.Reflection.MethodBase prevMethod = prevFrame.GetMethod();
          }
     }
}
于 2008-10-03T19:12:57.003 回答
0

我不知道如何使用反射,但看看使用编织。SpringFramework.Net 允许您定义可以拦截方法调用的切入点。其他人可能也会这样做。

这是“BeforeAdvice”拦截器的链接 http://www.springframework.net/docs/1.2.0-M1/reference/html/aop.html#d0e8139

于 2008-10-03T19:30:56.920 回答
0

secondlife的人们暂停脚本并在服务器之间移动它们。这意味着他们必须捕获正在运行的脚本的状态,包括调用堆栈上的变量值。

他们的脚本语言在 mono 上运行,mono 是 .NET 运行时的开源实现。我怀疑他们的解决方案是否适用于常规的 .NET 运行时,但是关于他们如何做到这一点的演示视频(跳到下半部分)可能仍然很有趣。

于 2009-11-23T00:32:33.083 回答