使用 Xdebug 进行 PHP 代码调试
Contents
Xdebug 与 PHPStorm 应该是学 PHP 的同学们都熟知的两款工具,用 PHPStorm 可以方便地与 Xdebug 拓展进行通信,进行 PHP 代码的调试、优化。
Xdebug 下载安装
版本选择
首先下载 PHPStorm 与 Xdebug,注意他们两者的发布时间,最好是 Xdebug 版本的发布时间早于 PHPStorm 对应版本的时间,不然可能会有一些奇怪的问题。 比如,我的 PHPStorm 是 2019.2 版本的,那么我选择 Xdebug 就最好选择这个时间之前发布的,比如 Xdebug 2.6.1(2018 年 9 月发布的)。其实也很好理解,比 Xdebug 版本更新的 PHPStorm 才能完全兼容 Xdebug,向下兼容。
安装
下载 Xdebug,并编译安装。
当运行php -m
后能在Zend Modules
节中看到 Xdebug,说明插件安装成功,例如:
|
|
编辑 Xdebug 配置
输入php --ini``,找到 xdebug 的配置文件路径 图片 如果没有找到 xdebug 单独的配置文件,八成 xdebug 的配置写在
php.ini`中。
Xdebug 的几种功能
- Debug: 代码调试。
- Profiler: 性能分析。
- Trace: 代码跟踪,了解代码的执行轨迹。
本文主要介绍Debug
与Profiler
两种功能。
Debug 模式配置
使用 Debug 模式,可以进行代码的单步调试。打断点,让代码运行到某个位置,并能查看此时调用栈、变量等信息,比echo
、print
、var_dump
等调试方法方便不少。
remote_autostart
是否自动开启调试,一般填0
,即不自动开启调试。如果自动开启调试的话,每个 PHP 请求都会进入调试模式,使用起来不够方便。
remote_enable
是否开启调试。只有当这个配置的值为1
的时候,才能进行 Xdebug 调试。因此这个值填写1
。
remote_port
Xdebug 的通信端口,IDE 将通过此端口与 Xdebug 进行通信。默认值为9000
,但会与 PHP-FPM 的默认端口冲突,因此我把该值设置为9001
。
remmte_hander
Xdebug 通信协议类型,一般写为dbgp
。
idekey
调试密钥,后面在 PHPStorm 中会配置此项。
PHPstorm 配置
打开 PHPStorm 的配置页面(菜单的 Preference
选项),选择 Language & Frameworks
下的 PHP
,然后如图进行配置。
首先配置 Debug
菜单下的 Xdebug 配置项
,Debug Port
写Xdebug 配置文件中remote_port
的值。
配置 DBGP 相关信息,IDE Key
同 Xdebug 配置中的 idekey
配置项。
至此,PHPStorm 的 Debug 环境就配置完了,就可以使用 PHPStom 的单步调试功能了。
Profiler 模式配置
Xdebug 也为我们提供了方便的性能分析功能,使用该功能,能方便得看到各函数的调用情况、执行时间等信息,从而找出代码瓶颈,方便优化代码。
profiler_enable
是否启用 Profiler,启用之后,每次运行 PHP 脚本都会进行性能分析,因此一般建议关闭此功能。
profiler_enable_trigger
是否启用 Profiler 触发器。一般填1
,即启用。
profiler_enable_trigger_value
Profiler 触发器的触发值。只有当profiler_enable_trigger
开启且调试时传入的触发值等profiler_enable_trigger_value
的值时,Xdebug 才会启动性能分析。
profiler_output_dir
分析结果文件输出的目录。Profiler 分析的结果是输出到文件的,因此需要指定文件存放的目录。
profiler_output_name
分析结果输出文件名,有多种格式,具体可参考相关文档。
如何使用 PHPstorm 分析 Profiler 文件
使用 Xdebug 生成的 Profiler 文件内容繁杂,不易于直接进行分析,一般使用工具对其进行分析,从而得到易于阅读的分析结果。市面上有不少类似的分析软件,安装起来比较麻烦。其实,PHPStorm 就有自带的类似工具,也基本能满足需求。
在 PHPStorm 的菜单中选择 Tools
下的 Analyze Xdebug Profiler Snapshot
,如图
选择Xdebug 生成的 Profiler 文件后,就看到下图的分析结果。
在Call Tree
中可以看到各个方法的运行时间以及时间占比。在Call Tree
中选择某个方法,然后在下方的Callees
中可以看到该方法调用了哪些方法,而在Callers
中可看到该方法被哪些方法调用。
贴出我自己的 Xdebug 完整配置
|
|
Xdebug 其它参数项说明
与 Postman 交互
Postman 是一款出色的接口调试软件,它也能通过 Xdebug 与 PHPStorm 进行单步调试。
打开 Postman,配合好要调试的接口,然后在要调试的接口中配置 Header,添加一个 Header,key
为 Cookie
,value
为 XDEBUG_SESSION=PHPSTORM
,即之前在 Xdebug 中配置的的idekey
值。然后在 PHPStom 中打断点,就可以体验到 Postman 与 PHPStom 交互调试了。
同样的,添加一个 Header,key
为 Cookie
,value
为 XDEBUG_PROFILE=PROFILER_TRIGGER
,即 Xdebug 中设置的profiler_enable_trigger_value
值,就可以进行接口的性能分析,分析结果以文件形式输出到 Xdebug 配置中指定的目录。
参考文献
Author jakseer
LastMod 2019-10-19