问题描述
我的目标是在引发异常时将调用堆栈状态保存在文件中。但是我有一个主要的限制:我无法触及任何现有代码。我的目标是在我不了解当前工作流程的情况下实现这一目标。所以我可以在任何C#项目中使用它。
为此,我需要访问所有导致异常的嵌套方法以及所有方法的参数。
直到现在,我一直使用postharsh的OnMethodBoundaryAspect,该方法使我可以定义OnEntry,OnSucess和OnException方法,无论何时输入方法:,返回或引发异常,都将调用它们。很棒的是,我可以在我想要的项目中使用postsharp.config
文件来应用此方面。没有源代码修改,我只将我的项目添加到解决方案中,一个配置文件,并在解决方案的每个项目中引用我的项目,我很高兴。使用它,我可以维护自己的调用栈,并且可以保存对方法名称的引用以及对方法参数的引用。
现在,假设methodA
称为methodB
,后者称为methodC
。
除了明显使用引用之外,我所做的工作效果很好。因此,如果在引发异常之前在methodA
中修改了methodC
参数,则当我序列化调用堆栈时,我们将看到一个调用堆栈,其中methodA
的参数值有误(我们将看到在methodC
中设置的值。
我想解决此问题,并考虑使用:
- 在OnEntry方法中进行深克隆以复制所有方法参数,但这会导致糟糕的性能
- PostSharp LocationInterceptorAspect,但需要付费许可证
- VEH挂接,但是它非常慢,使用
deepcloning
可能会更快
是否还有其他方法可以使我及时保存对象的状态,从而获得比deepcloning
更好的性能,或者至少让我拦截对指定对象带来的所有修改(例如VEH钩子或LocationInterceptor方面)?
PS:我不能使用IOnPropertyChange
之类的东西,因为我无法触摸任何现有的sourceCode,除非我可以在运行时实现它们,但是我看不到任何可能的地方。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)