有没有办法使用.NET反射来捕获所有参数/局部变量的值?
答案 0 :(得分:3)
您可以使用CLR debugging API获取此信息,但提取它不会是简单的几行。
答案 1 :(得分:2)
反射不用于从堆栈中捕获信息。它读取大会。
您可能想看一下StackTrace
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx
这里有好文章:
http://www.codeproject.com/KB/trace/customtracelistener.aspx
答案 2 :(得分:1)
Reflection将告诉您方法具有的参数类型,但在任何特定调用期间它都无法发现它们的值。反射根本不会告诉你关于局部变量的任何信息。
您需要调试器用来访问此类信息的API。
答案 3 :(得分: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();
}
}
}
答案 4 :(得分:0)
我不知道如何使用反射,但看看使用编织。 SpringFramework.Net允许您定义可以拦截方法调用的切入点。其他人也可能这样做。
这是“BeforeAdvice”拦截器的链接 http://www.springframework.net/docs/1.2.0-M1/reference/html/aop.html#d0e8139
答案 5 :(得分:0)
secondlife处的人员暂停脚本并在服务器之间移动它们。这意味着他们必须捕获正在运行的脚本的状态,包括调用堆栈上的变量值。
他们的脚本语言运行在mono,这是.NET运行时的开源实现。我怀疑他们的解决方案适用于常规.NET运行时,但video of the presentation on how they did it(跳到下半部分)可能仍然很有趣。