Xdebug 单步调试配置(Intelij IDEA)
文章目录
php 开发中需要加入很多log日志来记录每次请求和响应的结果,但是开发过程中这种打log的方式非常低效而且繁琐,因本身主要Android和JAVA的开发,所以没有安装 PhpStorm , 而是利用 Intelij Idea 进行配置,下面主要讲述如何利用 Intelij Idea 进行单步调试。这里会用到 Xdebug 工具,下面主要讲述如何利用 Xdebug 实现在 Intelij Idea 中进行调试。
Xdebug 是什么
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
官网
如何安装 Xdebug
下载地址
上面有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 详细的配置可以参考官网:
注意: 配置完成记得重启下 php 的服务哟
完成后可以输入: php -m
看看是否能看到 Xdebug 模块
Idea 配置
配置 Server
进入首选项,打开如图所示配置
新增一个配置项,填入name、host、port这些项,其中 host 和 port 是服务器地址以及对外的端口,如下图所示
配置 PHP Debug
打开 PHP->Debug 配置项,输入 Debug 端口号,这个主要用来和服务器端的xdebug进行通信,端口要和 php.ini 中 xdebug.remote_port 配置的值一致
配置 DBGP Proxy
打开 PHP->Debug->DBGp Proxy ,填入 IDE Key、host、port,其中 IDE Key 和 php.ini 配置中 xdebug.idekey 配置要保持一致
验证配置
上述配置保存成功后,就可以验证配置是否生效,通过添加 PHP remote debug 来进行验证
将服务跑起来,代码中加上断点,发送个请求,如果能进入断点,说明配置就成功了,大功告成。
注意点
如上所示的地方千万记得要打开,要不然debug不会生效,所有的努力都白搭,还有就是如果发现返回 504 Gateway Time out
,可以修改 nginx 配置项 fastcgi_send_timeout,fastcgi_read_timeout 设置时间长一点试试。
文章作者 Brook
上次更新 2020-09-07