前言
在日常开发中经常使用 var_dump() + die 的方式进行断点调试,虽然可以满足业务需求但不够方便,存在很多缺点例如 断点的代码影响代码结构, 若该代码没有注释则会直接影响代码程序, 若删除对应代码后续还要使用需要重复操作等等问题, 而推荐使用 Xdebug 会完美解决上述问题,下面就针对 cli 下以及使用 postman 如何配合 Xdebug 进行使用处理。
安装 Xdebug
- 打开 https://xdebug.org/wizard,按照如下图例进行操作
这里它会根据你的环境、PHP 版本以及相关扩展缺失情况,提供 .dll / .so 后缀的拓展文件,扩展的添加语句,根据流程操作即可。 - 校验扩展安装情况,输入 php -m, 若显示如下内容则视为扩展安装成功。
若 windows 环境下出现 php -m 出现以下错误, 在 php.ini 文件中只需添加 zend_extension = xdebug.dll,无需追加 extension = xdebug.dll,就可以解决。
PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
PHP Warning: Module 'xdebug' already loaded in Unknown on line 0
Warning: Module 'xdebug' already loaded in Unknown on line 0
相关 Xdebug 的配置说明
相关配置说明地址, 我这边的配置如下图所示
[Xdebug]
zend_extension = C:\xampp7\php\ext\php_xdebug.dll
;启用步骤调试。这可用于在代码运行时单步执行代码,并分析变量的值。
xdebug.mode=debug
;指定传递给DBGp调试器处理程序的IDE Key。
xdebug.idekey=PHPSTORM
;是否开启远程调试
xdebug.remote_enable = 1
;指定远程调试的处理协议
xdebug.remote_handler = dbgp
;可以设为req或jit,req表示脚本一开始运行就连接远程客户端,jit表示脚本出错时才连接远程客户端。
xdebug.remote_mode=req
;指定远程调试的主机名
xdebug.remote_host = localhost
;指定远程调试的端口号
xdebug.remote_port=9000
PHPStrom 的配置说明
-
开启 Xdebug 的功能
-
定义服务器配置
-
验证 Web 服务器上的调试器配置
Cli 环境下实现 Debug 调试
原因:因为 PHPStorm 的脚本需要选择执行文件, 而 Yii、Laravel 框架则需要执行 php yii 这类的命令才能执行,因此无法实现断点,所以我们需要使用一些小技巧。
- 创建执行控制台命令的 php 文件, 如下所示
<?php
$command = 'php yii';
foreach ($argv AS $k => $v) {
if($k > 0) $command .= ' '.$v;
}
system($command);
-
配置 运行/调试配置,如下所示,如果需要配置追加参数, demo/test 0 1 即可。
-
打断点
-
运行并且查看 Debug 及结果,如下图所示
WebAPI 实现 Debug 调试
开启 PHP侦听连接,如下图所示
使用 chrome 浏览器的话,可以安装 Xdebug helper 插件,然后开启 debug 即可。
如果要使用 postman 这类的工具的话, 可以设置下 Cookies, 如下图所示
相关 cookies 参数
XDEBUG_SESSION=XDEBUG_ECLIPSE; Path=/;
tips: 如果发现不对,可以按照 chrome 的插件安装 Xdebug helper,开启 debug 后,访问自己的域名,查看对应 Cookies 信息,即可知道结果, 然后按照上述流程进行操作即可看到断点结果。