PHPStorm 本地 Debug 配置
Drunkbaby Lv6

其实算是很早就应该记录的内容,一直被我拖着了

PHPStorm 本地 Debug 配置

文章内容主要摘自 oatmeal 师傅的博客 https://oatmeal.vip/tools/phpstudyphpstormxdebug/

XDebug 是如何工作的?

IDE 结合 XDebug 调试原理

  • IDE 行为:打开本地端口(XDebug 2.X 默认为 9000,3.X 默认为 9003)进行监听;同时做好路径映射,将本地的项目与远程服务器的项目目录做一一映射。
  • 浏览器行为:向服务器发起请求,Headers 中带上 Cookie:XDEBUG_SESSION=IDEKEY
  • 服务器行为:检测到 Cookie,挂起PHP解释器,等待进一步请求;同时获取请求的来源地址,发起对对方端口(此端口与监听端口一致)的访问,建立调试连接。
  • IDE 行为:发现有调试连接建立,判断 XDEBUG_SESSION 是否为预设的 IDE key,如果是,双方协商,进入调试状态。

为什么 Debug 这么难?

习惯了 Pycharm 和 CLion 的直接虫子 Debug,可能对 PHP 为何如此难用 Debug 感到困惑,这里借了Clang 佬的一张图(来自某年 XMAN):

可以看到整个流程中存在三方角色:本地的负责调试客户端的 PhpStrom,提交请求触发调试的浏览器(例如 Chrome)以及安装了 XDebug 等待被调试 PHP 服务器 Apache/Nginx 等(这部分在 Windows 下使用 PHPStudy 实现)。三者都存在于本机中,于是会使人产生了在本地调试的错觉。其中最大的区别是 php 解析器是被 apache/nginx 等中间件调用,phpstorm 需要经过中间件与调试的 php 代码进行通信,本质上是一种远程调试,而 XDebug 就是实现的插件。

XDebug 下载与配置

这里 PHPStudy 其实已经带有了 XDebug,所以在 PHPStudy 里面去做

在 php.ini 里面配置 xdebug 的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Xdebug]
xdebug.idekey=PHPSTORM
zend_extension=D:/phpstudy_pro/Extensions/php/php7.4.3nts/ext/php_xdebug.dll
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.auto_trace=Off
xdebug.trace_output_dir=D:/phpstudy_pro/Extensions/php_log/php7.4.3nts.xdebug.trace
xdebug.profiler_enable=Off
xdebug.profiler_output_dir=D:/phpstudy_pro/Extensions/php_log/php7.4.3nts.xdebug.profiler
xdebug.remote_enable=On
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

然后重启服务器,访问 phpinfo,可以看到已经有 Xdebug 了。

PHPStorm 开启监听

PhpStorm 的配置不用做太大的变化,默认也是开启了 Debug 的,匹配一下端口就行了。

设置监听的服务器信息

Debug → DBGp Proxy,这里是设置 IDE key 以及监听 host 和 port 信息的,这里注意和 php.ini 的属性保持一致即可。

再配置 Web Page

点击上面那只小虫子,是一个打电话的形式,这就开启了监听。

配置 xdebug helper 插件

这样子的话,就可以直接在开启监听的情况下,通过插件来做调试的开启与否。

 评论