Launch Chrome with JS scripts suspended at startup
在NodeJS中,您可以使用--debug-brk选项运行脚本,该脚本会在第一行暂停脚本。然后,您可以附加调试器并继续,以确保无论脚本中的断点有多早都可以击中任何断点。
Chrome / Chrome调试协议中是否存在类似内容?
我使用外部调试器在Chrome中调试JS。 Chrome是通过命令行启动的,并启用了远程调试功能,并指向我的网站/应用中的本地服务器。启动Chrome后,调试器将附加到页面上,但这会花费一些时间-附加调试器时,脚本已经执行了很多,这意味着我无法触及网站/应用程序生命周期早期的断点。铅>
我想到了在每个脚本的开头添加debugger;语句,但是随着时间的推移这会很烦人。我还认为,需要打开Chrome开发工具才能使debugger;语句真正暂停,因此甚至可能无法正常工作。
在Chrome DevTools中,您可以使用"事件监听器断点"来强制执行在"脚本第一条语句"上暂停。还有其他一些,例如load,稍后会发生。然后,您可以继续执行,直到达到相关的断点为止。
- 您是否知道在启动Chrome时是否可以通过命令行参数来控制此复选框,或者是否可以通过Chrome调试协议消息来控制此复选框?因为我使用的是外部调试器,所以我需要以某种方式能够从Chrome开发人员工具外部启用该复选框
-
选中的设置将一直保留,直到您取消选中它为止。我不知道您的设置,但是说您在一台设置了--remote-debugging-port标志的计算机上运行了Chrome主机,然后打开了应用程序,然后在另一台计算机上打开了Chrome,导航至host:port地址,然后选择标签。如果您在客户端上设置了事件侦听器断点,然后在主机上刷新了该应用程序,则它应在客户端上断开。如果您正在使用另一个调试器(使用/ JSON端点),那么我想取决于调试客户端是否能够在第一个脚本上暂停?
-
有趣的是,这意味着应该有一种方法可以远程设置事件监听器断点,因为在您的示例中,"客户端" Chrome需要某种方式来通知"主机" Chrome应该在该事件上暂停。快速浏览了Chrome调试协议后,我似乎找不到与之相关的东西,但是必须有一种方法...我将继续寻找
-
您可能可以在"调试器协议查看器"中找到某些内容。我尚未通过远程调试进行测试,所以我可能是错的。
-
找到了!这是当您选中复选框时由"客户端" Chrome发送的Chrome调试协议消息(忽略id,可能只是该消息的特定于会话的ID):{ id: 101, method:"DOMDebugger.setInstrumentationBreakpoint", params: { eventName:"scriptFirstStatement" } }
-
@jenkins哦,很高兴知道!做得好。我假设您已经检查了DevTools应用程序以找出答案。