php cli debug,玩转 PhpStorm 系列(九):基于 Xdebug 进行代码调试(上)—— PHP CLI 应用...

玩转 PhpStorm 系列(九):基于 Xdebug 进行代码调试(上)—— PHP CLI 应用

由 学院君 创建于6个月前, 最后更新于 6个月前

版本号 #7

1711 views

1 likes

0 collects

前面的教程大多围绕的是如何提高 PhpStorm 的日常编码效率,无论是代码导航、插件、快捷键还是代码模板、代码重构,都是围绕着效率展开。接下来,学院君来给大家介绍一些效率以外的主题,比如调试、测试以及编码风格。

首先我们来看调试。

在 PHP 生态中,最有名的调试工具莫过于 Xdebug:

b5cff2906274d346148cf8016d566bdd.png

所以,接下来,我们就以 Xdebug 为例演示如何在 PhpStorm 中对 PHP 代码进行调试。

安装配置 Xdebug 扩展

使用 Xdebug 对代码进行调试前,先要安装对应的 PHP 扩展。

以 Mac 系统为例,我们可以在终端窗口通过 php -m 指令查看是否已经安装 Xdebug 扩展:

437e246d9f4cfae4977846b1135a64be.png

在 Zend Mdoules 列表中可以看到「Xdebug」即表示安装成功。如果还没有安装,可以参考 Xdebug 官方文档进行安装。

除此之外,还需要通过配置文件对 Xdebug 尽心配置,可以通过 php --ini 命令查看 PHP 配置文件路径:

9493d237064345e0d5f5088ff168463e.png

这里,我们在 /usr/local/etc/php/7.4/php.ini 中配置 Xdebug 配置如下(当然,你可以选择在 /usr/local/etc/php/7.4/conf.d 目录下新建一个 ext-xdebug.ini 对 Xdebug 进行单独配置,PHP 会自动加载对应的配置文件):

[XDebug]

zend_extension="xdebug.so"

xdebug.remote_enable=1

xdebug.remote_host=localhost

xdebug.remote_port=9001

xdebug.remote_autostart=1

xdebug.profiler_enable=1

xdebug.profiler_output_dir="/tmp"

xdebug.idekey=PHPSTORM

这里我们启用了远程监听(包括 IP 地址和端口设置)、脚本分析、以及设置 idekey 为 PHPSTORM,关于调试和分析配置项细节和含义,请参考 Xdebug 官方提供的调试设置和脚本分析文档。

完成以上准备工作后,可以在任意空目录下新建 index.php,在其中编写如下 PHP 脚本:

phpinfo();

?>

然后运行 php -S localhost:9000 来启动 PHP 内置 HTTP 服务器,在浏览器访问 http://localhost:9000,查看 PHP 中 Xdebug 扩展配置是否生效:

bccb05e62a17fe4ed2685a452008e42c.png

配置 PHP CLI 解释器

接下来,我们就可以在 PhpStorm 中通过 Xdebug 来调试 PHP 代码了。

开始进行代码调试前,先在 Preferences | Languages & Frameworks | PHP 中配置 PHP CLI 解释器:

90346e0a1070de1dc270ce536bdf6ca1.png

如果你的 PhpStorm 中当前 CLI Interpreter 一栏显示 的话,可以点击右侧「...」 按钮添加:

00f2d91cfc4025e328e8224df95a69ca.png

注:你也可以在这里看到相应的 Debugger 扩展是 Xdebug 2.9.6 版本,如果这里没有检测到对应的 Xdebug 扩展信息,表明该版本的 PHP 没有安装这个扩展,需要参考上面的安装设置步骤进行安装配置。

在 Name 框输入 CLI 解释器的名称,在 PHP executable 框输入当前系统 PHP 二进制文件的路径即可,如果不知道,可以在终端窗口运行 which php 命令查看。

调试 PHP 脚本代码

接下来,我们先来看一个本地 PHP CLI 脚本代码的调试。我们首先编写一段测试代码 multi.php,这段代码的作用是打印九九乘法表:

// 通过二维数组生成九九乘法表

$multi = [];

for ($j = 0; $j < 9; $j++) {

for ($i = 0; $i < 9; $i++) {

$n1 = $i + 1;

$n2 = $j + 1;

if ($n1 < $n2) { // 摒除重复的记录

continue;

}

$multi[$i][$j] = sprintf("%dx%d=%d", $n2, $n1, $n1 * $n2);

}

}

// 打印九九乘法表

foreach ($multi as $row) {

foreach ($row as $item) {

printf("%-8s", $item); // 位宽为8,左对齐

}

printf("\n");

}

我们在终端窗口执行这段代码,打印结果如下:

936383064cc7e7144219fbf3e58289ac.png

如果在代码执行过程中报错,或者想要了解代码执行的完整流程,可以在代码编辑区从指定位置设置断点(从任意你想要调试的位置开始):

492ae0bc17f074f70b1d214dcb5cb2bd.png

然后在 PhpStorm 导航菜单点击 Run->Debug...(或者通过快捷键 Ctrl + Option + D):

0c647254bdf1dd7cc9ee82d22c86e85b.png

在弹出窗口选择要调试的 PHP 脚本:

c59c0eddf2f11f6c7473762dcfbde90c.png

即可进入 PHP CLI 脚本的调试流程:

583dab11e96fff798d3a47aab7d0e9cd.png

接下来,你可以点击上图红框内的按钮进行断点调试,将鼠标移到对应的按钮上会出现提示文本,比如 Step Over 表示跳过当前这一行,Step Into 表示进入函数内部等等,这里我们可以点击通过 Step Into(第二个按钮)逐行调试代码,在调试过程中,你可以实时看到当前作用域内变量的值:

99086304ada9d1dc732b800aa709202b.png

这样,可以及时感知代码当前的执行状态,从而对出现问题的地方进行定位和排查原因。如果代码逻辑很复杂,变量很多,还可以通过将关心的变量添加到监控区进行查看:

d1003507a087f4623d9294dd129c1499.png

00671e64eaf074d27af10875145bd025.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值