这更多的是一个假设性问题。有时 JavaScript 代码可能会进入无限循环并阻塞一切,特别是在开发的早期阶段。我知道最好的解决方案是编码,这样这种情况就不会出现,但如果在某种情况下不可能编写完整的代码怎么办(可能是因为我们无法控制输入或其他东西)。
有没有什么方法可以让我们以编程方式确定代码何时处于无限循环并终止它?
也许在单独的线程或子进程中同步运行可能发生这种情况的代码片段,并确定该线程/进程何时处于无限循环中。
如何才能做到这一点呢?是否可以通过单独确定某个线程(主线程或子线程)的 CPU 使用率来确定该线程何时处于无限循环中?
根据下面评论中的讨论,我意识到仅凭跟踪类似语句的重复执行和高资源利用率来识别阻塞无限循环是不可能的。所以我认为解决方案在于两者的结合。但这又回到了我们之前的问题。我们如何通过脚本来测量CPU使用率?
对于简单的循环,您可以使用此处使用的方法(pdf链接)。它使用基于路径的方法来检测无限循环。语句被视为图的节点。
您还可以看到这篇论文。他们已经为java程序实现了运行时解决方案。
鉴于没有提出其他可行/复杂的解决方案,低技术解决方案是仅使用计数器,并在达到荒谬的高数字时中止。
这需要手动编码工作,但当您知道无限循环已经发生时,这对于调试无限循环很有用。
var count = 0
while(true){
if(count++>100000){
//assume infinite loop, exit to avoid locking up browser while debugging
break;
}
}