我正在为浏览器中运行的代码实现交互式调试工具。当我到达“断点”时,我需要调用调试器并等待所需的操作,当然可能包括“继续”命令以进一步执行脚本。
为此,我编写了一个小型 Node.js Web 服务器,它使用长轮询技术处理这些“调试”请求。调试器界面在另一个浏览器窗口中运行,并与 Node.js Web 服务器通信,因此命令可以有效地从另一个浏览器发送到正在调试的脚本。
正在调试的脚本中的“停止”是使用同步请求实现的,该请求在 for(;;)
循环中最多花费 N 秒,当命令 "时可以退出该循环续”
已收到。如果程序员没有在限制内使用调试器接口(interface)发送命令,服务器会自动发送“等待更多”答案,并且脚本仍处于无限循环中。
一切都运行良好,除了浏览器(在本例中为 Chrome)一段时间后会弹出一个对话框,告知正在调试的脚本被卡住并提供了终止它的选项。无论 N 的值是多少,都会发生这种情况。
有没有办法等待命令而不让浏览器终止脚本?超时可以更改吗?
请注意,更改脚本以使用回调逻辑就像在浏览器中编程时通常完成的那样是不可能的(除非您正在谈论在通用程序上执行完整的CPS transform,并且我不想去那里)。
最佳答案
如果不使用浏览器扩展(例如 firebug)所使用的 JS 调试接口(interface),则无法正确停止脚本。
像您目前所做的那样通过主动等待进行阻塞是一个非常糟糕的主意,因为它会消耗大量的 CPU 功率并阻塞整个浏览器(至少在 Firefox 中)。
关于JavaScript 阻塞等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574979/