使用PhantomJS设置远程debugging
我试图用PhantomJS设置远程debugging,没有太多的运气。 我正在按照https://github.com/ariya/phantomjs/wiki/Troubleshooting上的说明进行操作。 我有一个名为debug.js
的小程序:
var system = require('system' ), fs = require('fs'), webpage = require('webpage'); (function(phantom){ var page=webpage.create(); function debugPage(){ console.log("Refresh a second debugger-port page and open a second webkit inspector for the target page."); console.log("Letting this page continue will then trigger a break in the target page."); debugger; // pause here in first web browser tab for steps 5 & 6 page.open(system.args[1]); page.evaluateAsync(function() { debugger; // step 7 will wait here in the second web browser tab }); } debugPage(); }(phantom));
现在我从命令行运行这个:
$ phantomjs --remote-debugger-port=9001 --remote-debugger-autorun=yes debug.js my.xhtml
console.log
消息现在显示在shell窗口中。 我打开一个浏览器页面localhost:9001
。 正是在这一点上,文档说“获取第一个虚拟环境的networking检查员”然而,我只看到一个about:blank
条目。 当我点击那个,我得到一个检查器,与无关的:空白页面,URL为http://localhost:9001/webkit/inspector/inspector.html?page=1
。 该文件谈到执行__run()
,但我似乎无法进入页面,我会这样做; about:html
似乎contina一个__run()
这是一个无操作。
FWIW,我在W8下使用PhantomJS 1.9.1。
我错过了什么?
该文件说:
要运行脚本,只需在Web Inspector Console中input__run()命令即可。
__run()
不是一个空操作,而只是脚本的一个包装。 您需要先selectConsole选项卡,然后在命令窗口中input__run()
。 如果您熟悉Chrome,则与开发人员工具相同。
要debugging脚本,请启动phantomjs,如下所示:
phantomjs --remote-debugger-port=9000 hello.js
这是一个超级简单的testing脚本(hello.js)。 请注意,你应该把“debugging器” 在脚本的顶部,或脚本中的任何位置,都可以进入debugging器。
debugger; for (var i=0; i < 5; i++) { console.log('debugging in phantom js:' + i); } phantom.exit();
现在只需在浏览器中加载以下url:
http://127.0.0.1:9000/
然后,您会看到浏览器页面中列出的链接
about:blank
点击它,然后你会看到一个看起来像Chrome Inspector的整个页面。 点击本页面工具栏中的“控制台”button(而不是您以前使用的Chrome或Safari的控制台)。
现在,在该控制台中键入“__run()”,然后回车。 您的脚本将显示并开始debugging!
我在使用Chrome Version 57.0.2987.133(64-bit)进行debugging时遇到了问题。 我得到debugging器打开本地主机:9000(127.0.0.1:9000不适合我),但input__run()(是的,双下划线)后,没有任何反应。 我可以看到源下的其他js文件,我的列表,但是是空的。 (我没有启用debugging铬)
我在Safari浏览器上也是这样做的,而且所有这些都是按照广告的方式工
Chrome的更新:(从下面的Thiago Fernandes):显然这个问题是由于Chrome不接受input密钥造成的,所以解决方法是在Chrome控制台里面评估这个函数,以使enterKey工作:
function isEnterKey(event) { return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13; }