php 开发中需要加入很多log日志来记录每次请求和响应的结果,但是开发过程中这种打log的方式非常低效而且繁琐,因本身主要Android和JAVA的开发,所以没有安装 PhpStorm , 而是利用 Intelij Idea 进行配置,下面主要讲述如何利用 Intelij Idea 进行单步调试。这里会用到 Xdebug 工具,下面主要讲述如何利用 Xdebug 实现在 Intelij Idea 中进行调试。

Xdebug 是什么

Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。

官网

https://xdebug.org/

如何安装 Xdebug

下载地址

http://www.xdebug.org/download.php

上面有Windows、Linux、MacOs的安装说明,这里不再详细阐述

如何进行配置?

上述下载或编译完成之后会得到 .dll 文件(Win)或者 .so 文件(Linux、Mac) 下面主要讲述 Linux 下的配置,先将编译生成的 xdebug.so 放到 phplib 目录下

php.ini 配置

在 php.ini 文件中打开如下配置:

[Xdebug]
zend_extension="/home/work/odp/php/ext/xdebug.so"
;xdebug.auto_trace=On
;xdebug.collect_params=On
;xdebug.collect_return=On
;xdebug.trace_output_dir="/home/work/odp/var/xdebug/"
;xdebug.profiler_enable=On
;xdebug.profiler_output_dir="/home/work/odp/var/xdebug/"

xdebug.idekey=id_xdebug
xdebug.remote_enable = On
xdebug.remote_host=192.168.1.103
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=0
;xdebug.remote_log=/home/work/odp/log/xdebug.log
xdebug.remote_timeout=3000
xdebug.remote_autostart=1

zend_extension: 配置 so 的路径

屏蔽的部分是利用 xdebug 输出详细的函数调用路径以及执行时间,因本文主要讲述单步调试,不展开

xdebug.idekey: 这个需要和 IDEA 中配置一致,下面在讲述 IDEA 配置时会说到

xdebug.remote_enable: 是否支持远程调试,本地调试也是打开这个

xdebug.remote_host: idea 所在机器的 ip

xdebug.remote_port: Xdebug 通信端口,要与 Idea 中配置一致,后续会说到

xdebug.remote_handler: 通信协议,目前只能配置 dbgp

xdebug.remote_connect_back: 多个开发人员的时候会用到这个,如果设置为 1 会忽略 xdebug.remote_host 配置

xdebug.remote_log: 刚开始配置时不知道是 idea 的配置问题还是 xdebug 的配置问题,可以将该 log 打开定位问题

debug 详细的配置可以参考官网:

https://xdebug.org/docs/remote

注意: 配置完成记得重启下 php 的服务哟

完成后可以输入: php -m 看看是否能看到 Xdebug 模块

php-xdebug-success

Idea 配置

配置 Server

进入首选项,打开如图所示配置

php-xdebug-server

新增一个配置项,填入name、host、port这些项,其中 host 和 port 是服务器地址以及对外的端口,如下图所示

php-xdebug-server-conf

配置 PHP Debug

打开 PHP->Debug 配置项,输入 Debug 端口号,这个主要用来和服务器端的xdebug进行通信,端口要和 php.ini 中 xdebug.remote_port 配置的值一致

xdebug-php-debug-conf

配置 DBGP Proxy

打开 PHP->Debug->DBGp Proxy ,填入 IDE Key、host、port,其中 IDE Key 和 php.ini 配置中 xdebug.idekey 配置要保持一致

php-xdebug-dbgp

验证配置

上述配置保存成功后,就可以验证配置是否生效,通过添加 PHP remote debug 来进行验证

php-xdebug-remote

将服务跑起来,代码中加上断点,发送个请求,如果能进入断点,说明配置就成功了,大功告成。

php-xdebug-debug-result

注意点

php-xdebug-attention

如上所示的地方千万记得要打开,要不然debug不会生效,所有的努力都白搭,还有就是如果发现返回 504 Gateway Time out ,可以修改 nginx 配置项 fastcgi_send_timeout,fastcgi_read_timeout 设置时间长一点试试。