网上很多Xdebug的远程调试教程,但是大多数是各种复制粘贴,看完一头雾水,出问题也不知道从何解决,我将在这里结合自己的使用进行一次记录。
因为我使用虚拟局域网,所以本说明仅针对由PHP环境可以直接向IDE环境IP发起debug数据的情况。
原理
Xdebug远程调试的原理:PHP被请求过程中,向IDE的xdebug端口发起交互请求实现debug。
但你不会希望所有请求都向IDE发起交互,因此浏览器中Xdebug-helper插件的作用是在请求里加入一个Cookies,方便的开关,告诉PHP,这个请求我要debug。
php.ini里的xdebug.idekey用于定义这个Cookies的值,但是实测发现,debug功能只要有Cookies,就会进入debug,并不需要值对应,更不需要填到phpstorm里。
此外,xdebug的profiler功能可以用于分析瓶颈,这个必须在在Xdebug-helper里加入头并设置好对应的值,以便通知PHP这个请求我要分析文件。
Phpstorm的配置
从原理可以知道,远程调试模式下,phpstorm根本不需要设置什么key,因为key的作用我在实际测试后发现似乎是在于区分来源。网上的教程无脑复制真是够了。。
只需要保证2点:
1、监听端口是正确的,即远程PHP环境能够请求到
2、定义的服务器路径需要和远程的一致,不一致的话,其实也能工作,看看变量啥的没问题的,但会有错误提示。
第一点默认已经设置好了,不需要你去动他。 我用的是phpstorm 2020.1.3。
第二点在 Settings – Languages & Frameworks – PHP – Servers中添加。如果你有多个Server,就添加多个就好了,像我就有一个本地的Docker+一个线上环境,但是注意域名不能相同。
PHP的配置
PHP的配置就是装上Xdebug,定义前面说的xdebug.idekey,以便于你在浏览器里发请求的时候他好和你的IDE交互。
安装方式参考其他文章,不再赘述。
贴上我自己的配置内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
zend_extension=xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req ;这里是你的IDE的IP地址,我是虚拟局域网,所以就是这个IP xdebug.remote_host=192.168.2.111 ;默认端口 xdebug.remote_port=9000 ;这里决定了你在浏览器的xdebug-helper插件里要填的内容,带这个cookie内容就会触发debug。 xdebug.idekey="666" ;性能分析文件目录 xdebug.profiler_output_dir="/srv/www/xdebug/" ;性能分析cookie内容标识,类似前面的idekey。 xdebug.profiler_enable_trigger_value="777" ;性能分析使用开关模式,即根据cookie内容来判断要不要记录 xdebug.profiler_enable_trigger=1 |
Xdebug-Helper插件的配置
不要把这个插件想的太复杂,它其实没有什么交互,单纯是一个针对域名的开关功能,打开的情况下,域名请求下会植入一个Cookie。
下载地址: https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
安装完之后在图标上面右键选项,可以定义各个cookie的值。
需要注意的一个点是,实际上你并不需要设置debug的键值,只要打开debug,只要请求里的Cookies有XDEBUG_SESSION键,不管是什么值,php都会给你的ide发起交互。
而Profile功能还是需要对得上的,经过实测,Profile功能则是在请求里的Cookies加入XDEBUG_PROFILE键,值为你定义的值,该值需要和xdebug.profiler_enable_trigger_value一致。
总结
如果你单纯只需要xdebug,那实际上你只需要做3个事情:
1、php安装xdebug,配置好,重启php。
2、安装Xdebug-helper浏览器插件,啥都不用设置,在你要xdebug的域名页面,打开debug开关即可。
3、Phpstorm里添加服务器,告诉phpstorm即将进来的xdebug请求是哪个服务器的,以及对应哪个本地路径。
如果你还需要分析性能,那么xdebug-helper插件需要对应的设置好“Profile Trigger Value”:
其他
如果使用Profile功能,我个人目前的解决方案是使用Qcachegrind软件(windows)
然后在服务器的xdebug目录上开samba,直接在windows上挂载,并在Qcachegrind里打开查看,暂时没发现什么问题。
PHPstorm里自带的查看器感觉功能太弱了。