如何在受监视的进程中检测无限循环

时间:2011-12-06 10:33:42

标签: python monitoring infinite-loop

我正在使用Python(winappdbg)来监控进程(主要功能是捕获异常)。

但我也想检测无限循环。

你知道用Python做到这一点的方法吗? 有或没有winappdbg ...

3 个答案:

答案 0 :(得分:3)

检测无限循环的唯一方法是在循环中包含对那些将永远不会结束的条件的测试。

例如:如果你的循环应该使变量减少直到它达到零(var == 0将是退出条件),你应该包括测试我所谓的“正常工作条件” “即可。在此示例中,这将是:var < var_of_previous_iteration

捕获无限循环的另一种(不那么确定的)方法可能是包含一个计时器并在循环持续时间超过给定时间限制时触发异常[这是一个丑陋的黑客< / strong>但是,因为执行速度可能会受到影响,例如系统忙于做其他事情。

HTH!

答案 1 :(得分:2)

对于一般情况,无法检测到无限循环(Halting Problem)。也许对于特殊情况,我会让其他答案讨论,但如果所有案例都需要考虑,那么你注定要失败。

答案 2 :(得分:1)

无限循环通常消耗100%的CPU,而性能良好的程序则没有,所以我要做的第一件事是检查CPU的使用情况。不幸的是,这不会让您确定代码中无限循环的位置。

为此,您可以使用分析器记录代码执行的次数。如果你在一个意想不到的地区发现了大量的处决,那么至少值得研究一下。

编辑:正如mac所指出的,监视器CPU使用率对CPU密集型任务没有用,所以它不适用于所有情况。