https://confluence.jetbrains.com/display/PhpStorm/Zero-configuration+Web+Application+Debugging+with+Xdebug+and+PhpStorm
用Xdebug和PhpStorm实现的零配置Web应用调试
1. 安装xdebug
具体可以参考博客中关于deepin15使用一文和xdebug官网xdebug.org,用 /opt/lamp/bin/php --version或者执行带有函数phpinfo()的页面,可以检查PHP是否加载了xdebug扩展
注1:cli版php是否加载了xdebug,可以php -i查看,网页版只能带phpinfo()的网页查看
注2:可以将xdebug的配置写成独立的xdebug.ini,xdebug默认远程监听端口9000,远程主机localhost,最简单的就是
[XDEBUG]
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_enable=On
xdebug.idekey=phpstorm
注3:可以将xdebug.ini放到/etc/php/7.0/mods-available目录下,然后,/etc/php/7.0/apache2/conf.d目录(此目录下的配置都会被包含)下建立一个软链接到xdebug.ini
注4:https://xdebug.org/wizard.php,该页面内贴入phpinfo()的输出信息,可以给出编译安装xdebug的向导信息。比较新的PHP版本,应该也可以git clone代码(git clone git://github.com/xdebug/xdebug.git),可以从https://github.com/xdebug/xdebug 了解当前的代码版本
2. 准备phpstorm
点击phpstorm窗口右上角(导航条右侧部分)带电话机的按钮 “Start Listening for PHP Debug Connections”,这表示phpstorm开始监听(也可以从Run菜单找到该功能)
3. 在源代码中设置断点
你可以在PHP源代码中直接点击行左区域或者按Ctrl + F8 来设置或者取消行断点(更多断点方式可以看Run菜单),也可以从Run菜单设置在每个PHP脚本的首行中断执行
4. 从服务器激活调试器
为了激活调试器,你需要设置特殊的GET/POST或者COOKIE参数,你可以手动来实现,更方便的做法是使用特殊的工具,如浏览器工具条或者书签。方法是打开网址https://www.jetbrains.com/phpstorm/marklets/,输入Xdebug的IDE key = phpstorm,点击GENERATE,将链接Start debugger和Stop debugger拖放到Chrome书签栏(前面的网址提到的方法是帮你生成特别的书签(即js代码),然后你加入到书签,可以通过点击书签执行对应的js代码来实现参数设置。也可以用麻烦的GET型参数XDEBUG_SESSION_START,例如http://phpstorm.localhost/apmts_dv2017/web/index.php?r=site/about&XDEBUG_SESSION_START=phpstorm)
5. 从浏览器打开要调试的页面,点击书签Start debugger,在浏览器启动一个调试会话,
6. 然后刷新重新加载页面。
7. 注意:这个时候phpstorm是处于监听状态的,所以,它将捕获到进来的xdebug连接请求,而且因为已经设置了断点,所以,phpstorm中断在断点行上。如果服务器远程文件和本地项目文件不能够对应,phpstorm就弹出对话框让你设置(如果你建立项目时未设置项目部署配置,就会出现不对应的情况)。
https://confluence.jetbrains.com/display/PhpStorm/Debugging+PHP+and+JavaScript+code+at+the+same+time+in+PhpStorm
在phpstorm中同时调试PHP和Javascript代码
准备工作:Xdebug已经安装并配置,安装了phpstorm调试器书签或者对应浏览器的调试扩展,安装了Chrome浏览器扩展(JetBrain IDE support for Chrome,需要翻墙安装)。
1. 监听PHP调试连接
点击导航条右侧的Listen for PHP Debug Connections按钮或者使用菜单Run | Start listen for PHP Debug Connections 来启动监听
2. 启动 Javascript调试器
根据实际需要,我们可以使用phpstorm内置的web服务器在本地运行我们的应用,或者使用任何其他的本地或远程机器上的web服务器
2.1 (可选)使用内置webserver
要启动phpstorm的Javascript调试器,点击菜单Run | Debug,如果选中的文件是PHP文件,会出现两个入口(如果额外配置了非内置web服务器的调试,会有更多入口),应当选择图标是浏览器样子的那个(而不是PHP脚本图标的那个)。启动后,我们可以在Javascript中下断点,使用Javascript调试器。
2.2 (可选)使用非内置webserver
当使用本地的webserver,如Apache或Nginx,或者在远程webserver或Vagrant机器上开发的时候,我们可以使用Run/Debug配置来启动Javascript调试器。使用工具栏或者菜单 Run | Edit Configuration 来创建一个调试配置:
-点击+按钮,添加一个新的Javascript Debug调试配置
-输入完整的URL,指向服务器上我们要调试的页面
-(可选)提供一些映射,从而phpstorm可以确定哪儿去找到远程URL对应的本地文件。这一般在本地项目结构和远程服务器不同时需要。如果使用了用phpstorm部署php应用,映射会基于部署配置复用
配置好上述信息,我们可以从工具栏启动Javascript Debug会话(从下拉列表选择之前新加的Javascript Debug调试配置,然后点击带电话机的按钮)。
3. 从浏览器启动PHP调试会话
从浏览器,我们可以使用phpstorm调试用书签或浏览器调试扩展来启动php调试会话(具体参照前面《用Xdebug和PhpStorm实现的零配置Web应用调试》)。这步是指示PHP服务器产生一个到phpstorm的连接并打开调试器。一旦调试器附加上了,我们能够同时调试Javascript和PHP,必要时,phpstorm将在两种调试器之间切换。
4. (使用xdebug时可选)同时开启Javascript和PHP调试器
从菜单Run | Edit configurations添加一个新的Javascript调试配置,输入完整的URL,然后添加?XDEBUG_SESSION_START=phpstorm 这样的GET型参数,这样配置后,启动监听PHP调试连接,启动新建的调试配置(因为这是个Javascript调试配置,所以Javascript调试器被调用,又添加了GET型参数来唤醒PHP调试器,所以,两个调试器都启动了)
5. 故障说明:为什么不能对.php文件中的Javascript代码下断点? 答案是目前Phpstorm不支持PHP和Javascript在同一个文件的同时调试! 唯一的解决办法是把Javascript转移到独立的文件,然后从php文件(HTML部分)引用它。