我正在为浏览器中运行的代码实现一个交互式调试工具。当我到达“断点”时,我需要调用调试器并等待所需的操作,其中当然可能包括"continue“命令,以进一步执行脚本。
为此,我编写了一个小型node.js‘ve服务器,它使用长轮询技术处理这些“调试”请求。调试器界面在另一个浏览器窗口中运行,并与node.js can服务器通信,因此可以有效地将命令从另一个浏览器发送到正在调试的脚本。
正在调试的脚本中的"halt“是使用同步请求实现的,该请求在接收到命令"cont"时可以退出的for(;;)循环中最多需要N秒。如果程序员没有在限制范围内使用调试器接口发送命令,服务器会自动发送“等待更多”的应答,并且脚本会一直处于无限循环中。
一切都运行得很好,除了浏览器(在这里是Chrome)过了一段时间后弹出一个对话框,告诉正在调试的脚本被卡住了,并提供了杀死它的选项。无论N的值是多少,都会发生这种情况。
有没有办法在不让浏览器杀死脚本的情况下等待命令?超时是否可以更改?
请注意,将脚本更改为使用回调逻辑,就像在浏览器中进行编程时通常所做的那样(除非您正在谈论在通用程序上执行完整的CPS transform,而我不想谈到这一点)。
发布于 2012-05-20 16:15:23
没有可移植(跨浏览器)的方法来防止浏览器在认为执行占用太多时间时终止脚本,并且不可能像在GUI库中通常所做的那样启动嵌套事件循环来实现阻塞操作。
适用于Chrome的解决方案是使用以下选项启动浏览器
--disable-hang-monitor发布于 2012-05-14 04:36:20
如果不使用浏览器扩展(如firebug )使用的JS调试接口,则无法正确停止脚本。
像你现在这样使用活动等待阻塞是一个非常糟糕的主意,因为它会消耗大量的CPU资源,并且阻塞整个浏览器的(至少在火狐中是这样)。
https://stackoverflow.com/questions/10574979
复制相似问题