使用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; }