从.NET中的堆栈帧获取参数值?
我希望能够从.NET中的堆栈帧获取所有参数值。 有点像在Visual Studio调试器中看到调用堆栈中的值的方式。 我的方法集中在使用StackFrame类 ,然后反映在ParameterInfo数组上。 我在reflection和属性方面取得了成功,但事实certificate这有点棘手。
有没有办法实现这一目标?
到目前为止,代码如下所示:
class Program { static void Main(string[] args) { A a = new A(); a.Go(1); } } public class A { internal void Go(int x) { B b = new B(); b.Go(4); } } public class B { internal void Go(int y) { Console.WriteLine(GetStackTrace()); } public static string GetStackTrace() { StringBuilder sb = new StringBuilder(); StackTrace st = new StackTrace(true); StackFrame[] frames = st.GetFrames(); foreach (StackFrame frame in frames) { MethodBase method = frame.GetMethod(); sb.AppendFormat("{0} - {1}",method.DeclaringType, method.Name); ParameterInfo[] paramaters = method.GetParameters(); foreach (ParameterInfo paramater in paramaters) { sb.AppendFormat("{0}: {1}", paramater.Name, paramater.ToString()); } sb.AppendLine(); } return sb.ToString(); } }
输出如下:
SfApp.B - GetStackTrace SfApp.B - Go y: Int32 y SfApp.A - Go x: Int32 x SfApp.Program - Main args: System.String[] args
我希望它看起来更像这样:
SfApp.B - GetStackTrace SfApp.B - Go y: 4 SfApp.A - Go x: 1 SfApp.Program - Main
仅仅为了一些上下文,我的计划是在我抛出自己的exception时尝试使用它。 我会更详细地看看你的建议,看看我是否能看到它合适。
似乎不能这样做。 它仅提供有关方法及其参数的元信息。 不是callstack时的实际值。
有人建议从ContextBoundObject派生您的类,并使用IMessageSink通知所有方法调用和参数值。 这通常用于.NET Remoting 。
另一个建议可能是编写调试器。 这就是IDE获取其信息的方式。 Microsoft有Mdbg ,您可以从中获取源代码。 或者写一个CLR分析器 。
上述就是C#学习教程:从.NET中的堆栈帧获取参数值?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949747.html