小编X.C*_*.C.的帖子

如何在堆栈中获取本地和参数的当前值?

在.NET应用程序中,我有一些要点,我需要收集有关当前线程状态的一些调试信息.我可以获得一些信息new StackTrace()构造函数.特别是,我可以获得当前堆栈帧的列表,包括相应的MethodInfo对象,它可以提供IL代码,局部变量和参数的数量以及参数名称.

如何获取这些局部和参数的当前(至少是原始类型)?

我无法手动将任何调试器附加到应用程序,但应用程序可以在需要时生成新进程.

.net c# reflection debugging cil

23
推荐指数
1
解决办法
1308
查看次数

阻止电源/硬件/操作系统故障的程序

我需要编写一个程序,在可能的状态的大空间中执行并行搜索,在此过程中发现新区域(并开始探索),并且在其他地方获得的中间结果的早期终止的某些区域的探索消除了可能性在其中发现新的有用结果.使用彼此密切协作运行的多个线程来执行搜索,以避免重新计算中间数据.

在整个过程中必须维护和更新复杂的内部状态(包括它们使用的多个线程和状态同步原语的调用堆栈),并且没有明显的方法将计算分成可以顺序执行的隔离块,每个节省并将一个小的中间结果传递给下一个.此外,没有办法将计算分成不相互通信的独立并行线程,而不会由于重新计算大量中间数据而产生过高的开销.

由于搜索域较大,该程序可能会在产生最终结果之前运行数月.因此,在程序执行期间存在电源,硬件或操作系统故障的重大风险,这可能导致完成当前已完成的所有工作的丢失.在这种情况下,程序将需要从头开始重新启动所有计算.

我需要一种能够防止在这种情况下完全丢失数据的解决方案.我想到了一个执行引擎/平台,它可以将进程的当前状态持续保存到像冗余磁盘阵列或数据库这样的防故障存储中.但是我理解这种方法可以显着减慢过程,甚至可以达到与预期的计算时间相比没有任何好处的程度,包括由于可能的故障导致的重启.

事实上,我不需要一个能够持续保存程序状态的理想解决方案,而且我可以轻松承担数小时甚至数天的工作损失.我想到的一个可能的重量级解决方案是在虚拟机内运行程序,不时保存其快照,并在最近的快照可能发生主机故障后恢复计算机.此方法还可以帮助在随机或可预防的客户操作系统故障后恢复程序状态.

是否有类似但更轻量级的解决方案仅限于保留单个进程的状态?或者你能建议任何其他可以解决我问题的方法吗?

resume recovery disaster-recovery state-saving

6
推荐指数
1
解决办法
80
查看次数