javascript - 如何检测和停止用户提供的 JavaScript 代码中的无限循环?

标签 javascript editor infinite-loop

我正在为游戏编写浏览器内代码编辑器。编辑器将允许用户编写自己的 JavaScript 文件,然后将其加载到运行编辑器的同一个 DOM 中。这将允许他们在代码旁边的 Canvas 元素中查看游戏,并在每次保存时更新它。

编辑器针对的是 JavaSript 新手,很容易意外陷入死循环。如果可能的话,我想设置我的编辑器,这样如果循环执行太多次或太快,循环就会中断,并且会弹出一条消息,提醒用户他们有一个无限循环。

这对于新手来说是理想的,因为如果整个编辑器突然崩溃,他们可能没有意识到自己的错误是什么,并认为这是我的编辑器的问题。

如何在我的编辑器中实现自动停止无限循环的故障保护?

最佳答案

处理用户提交的代码中潜在的无限循环的最佳方法是预编译代码以在代码中插入监控功能。这被称为 仪表 , 是 explained in detail by Codepen .

例如,来自用户的以下代码...:

for (var i = 0;; i++) {
  console.log("hello for loop.");
}

console.log("We'll never reach this line of code");

...将像这样被检测:

for (var i = 0;; i++) {
    if (window.CP.shouldStopExecution(1)) {
        break;
    }
    console.log('hello for loop.');
}

console.log('finished because we broke out of the loop');

关于javascript - 如何检测和停止用户提供的 JavaScript 代码中的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948315/

相关文章:

javascript - 如何将 Google 表格电子表格打开到包含今天日期的单行中的单元格

callback - 修复函数后运行自定义 Hook

javascript - JS 循环和填充数组。哪个更快?

javascript - 如何同时在多个 div 上运行一个函数?

javascript - ace 编辑器非捕获组问题(?:)

javascript - (Promise loop)_让div一个一个高亮有延迟

c - 在 C 编程中退出 while(1) 循环

javascript - 带重定向路由的 Vue-Router 无限循环

javascript - Jquery 动态创建复选框,并查找复选框

javascript - 在 javascript 中添加和删除对象