请在Chrome、Firefox、IE8+等现代浏览器浏览本站。 本博客所有文章为原创,图片不加水印,随意转载,但请注明来源,谢谢!

PHPstorm-Xdebug远程调试的实现及深入解析

后端 kxjhwbb 154℃ 0评论

网上很多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+一个线上环境,但是注意域名不能相同。

PHPstorm-Xdebug远程调试的实现及深入解析

 

PHP的配置

PHP的配置就是装上Xdebug,定义前面说的xdebug.idekey,以便于你在浏览器里发请求的时候他好和你的IDE交互。

安装方式参考其他文章,不再赘述。

贴上我自己的配置内容:

 

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”:

PHPstorm-Xdebug远程调试的实现及深入解析

 

其他

如果使用Profile功能,我个人目前的解决方案是使用Qcachegrind软件(windows)

然后在服务器的xdebug目录上开samba,直接在windows上挂载,并在Qcachegrind里打开查看,暂时没发现什么问题。

PHPstorm里自带的查看器感觉功能太弱了。

喜欢 (10)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址