文章目录
1 介绍
Xdebug官网:https://xdebug.org/。
Xdebug 是一个开源的PHP调试器。以PHP扩展的形式安装到PHP中。典型功能有:
- 单步调试,single step debug
- 调试版的 var_dump()
- 增加了错误,异常的 stack traces
- 可记录每个函数调用和变量的分配
- 增加了一个分析器 profiler
- 为 PHPUnit 提供了一个代码覆盖(code coverage)功能
2 安装
下载
下载xdebug的PHP扩展,下载地址:https://xdebug.org/download.php。
根据PHP版本、是否为TS(线程安全)和系统位数选择合适的版本。
加载扩展
编辑 php.ini
增加:
zend_extension=d:\services\php\ext\php_xdebug-2.7.0beta1-7.3-vc15-x86_64.dll
[Xdebug]
xdebug.remote_enable = On
安装成功
运行 php -m
检查 xdebug 扩展是否安装:
> php -m
[Zend Modules]
Xdebug
或者重新启动 web服务器,通过 phpinfo 确认xdebug模块已经安装,若安装,phpinfo会存在xdebug模块,例如:
Xdebug扩展配置请参考:Xdebug扩展配置,http://php.hellokang.net/xdebug-options.html
3 PHPStorm +
PHPStorm版本:2018.3.2
1,选择安装了 xdebug
扩展的 PHP解释器。配置项 File
> Settings
> Languages & Frameworks
> PHP
,如下图所示:
2,配置 PHP
的 Xdebug
调试器信息。配置项 File
> Settings
> Languages & Frameworks
> PHP
> Debug
,将 Xdebug 的相关信息与PHP的xdebug的扩展保持一致,主要是 debug port,如下图所示:
4 单步调试
以上配置信息配置完毕后,就可以实现单步调试了。两个步骤:
- 单击编辑器代码的左侧空白添加断点。
- 调试运行代码。可以
Run
>Debug
;或者Alt+Shift+F9
;或者代码右键
>Debug
。
如图所示:
5 调试原理
- 安装了Xdebug扩展的PHP解释器在解释PHP代码时,Xdebug扩展会形成调试信息。
- xdebug扩展会将调试信息发送到配置的TCP地址:
<xdebug.remote_host>
:<xdebug.remote_port>
。通常就是我们的IDE(例如PHPStorm)。 - IDE接收到调试信息后,展示给coder。
- 单步调试的实现就是每当PHP解释器执行步代码后,就会将调试信息发送到目标地址。
参考执行的调试命令为:
> php.exe -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 debug.php
6 var_dump()
Xdebug 重写了PHP的 var_dump() 函数。Xdebug 的版本使用不同的颜色来展示不同类型,以及增加了数组元素和对象属性的数量、最大深度和字符串长度的限制。相关的配置是:
- xdebug.var_display_max_children
- xdebug.var_display_max_data
- xdebug.var_display_max_depth
7 堆栈跟踪,stack traces
Xdebug 在显示 notice, warning, error,都会显示堆栈跟踪。堆栈跟踪显示的信息,以及它们的显示方式,可以配置。
8 分析器,profiler
Xdebug 内置了分析器帮助我们在脚本中查找瓶颈,并使用外部工具(如KCacheGreend或WinCacheGreend)可以可视化这些瓶颈。
使用方法:
- 修改配置
xdebug.profiler_enable = On
,将profiler机制开启。开启后,执行PHP程序时会生成信息文件,位于xdebug.profiler_output_dir
指向的目录。文件名通常是:cachegrind.out.5544
后面的数字是进程ID。 - 使用分析工具(如KCacheGreend或WinCacheGreend),分析信息文件得到结果。
分析结果如图所示,使用的工具QCacheGrind:
9 Code Coverage Analysis
用于 PHPUnit 测试!
10 浏览器控制调试
调试也可以由浏览器发起。需要在浏览器安装 Xdebug Helper
插件。操作过程为:
- 在浏览器的扩展程序中搜索
xdebug helper
,安装到浏览器,成功后会在地址栏的右侧看到xdebug小虫子的图标。(自行解决) - 配置插件。主要是选择与插件交互的 IDE,本例中使用PHPStorm。在扩展程序处配置。
- 编辑器(phpStorm),启动监听调试请求,就是编辑器小电话的图标。
- 浏览器请求PHP程序,若需要调试,通过插件通知编辑器。
浏览器配置如图所示:
配置完毕,在IDE上完成调试。
原理,调试还是由IDE完成,浏览器插件的目的就是通知IDE启动调试,通知的手段就是增加了请求参数,准确的说是cookie,XDEBUG_SESSION=PHPSTORM。除此之外请求数XDEBUG_SESSION_START=PHPSTORM也可以用来告知IDE。
关于
原文出自:小韩说PHP
微信关注:小韩说课