2

我正在为在浏览器中运行的代码实现交互式调试工具。当我到达“断点”时,我需要调用调试器并等待所需的操作,其中当然可能包括“继续”命令以进一步执行脚本。

为此,我编写了一个小型 node.js 网络服务器,它使用长轮询技术处理那些“调试”请求。调试器界面在另一个浏览器窗口中运行,并与 node.js 网络服务器通信,因此命令可以有效地从另一个浏览器发送到正在调试的脚本。

正在调试的脚本中的“暂停”是使用同步请求实现的,该同步请求在一个for(;;)循环中最多需要 N 秒,当接收到命令时可以退出该循环"cont"。如果程序员没有在限制范围内使用调试器接口发送命令,服务器会自动发送“等待更多”答案,并且脚本保持在无限循环中。

一切都很好,除了浏览器(在这种情况下是 Chrome)一段时间后会弹出一个对话框,告诉正在调试的脚本被卡住并提供杀死它的选项。无论 N 的值是多少,都会发生这种情况。

有没有办法在不让浏览器杀死脚本的情况下等待命令?可以更改超时吗?

请注意,更改脚本以使用回调逻辑,就像在浏览器中编程时通常所做的那样是不可能的(除非您正在谈论对通用程序执行完整的CPS 转换,而我不想去那里)。

4

2 回答 2

3

如果不使用浏览器扩展(例如 firebug)所使用的 JS 调试接口,您将无法正确停止脚本。

像您目前所做的那样使用主动等待进行阻塞是一个非常糟糕的主意,因为它会消耗大量 CPU 资源并阻塞整个浏览器(至少在 Firefox 中)。

于 2012-05-13T20:36:20.180 回答
0

没有可移植(跨浏览器)的方法来防止浏览器在认为执行花费过多并且无法启动嵌套事件循环来实现阻塞操作时终止脚本,就像它在 GUI 库中通常完成的那样。

适用于 Chrome 的解决方案只是使用该选项启动浏览器

--disable-hang-monitor
于 2012-05-20T08:15:23.007 回答