详细介绍phpstorm debug工具之yasd「超好用」

1. 什么是yasd?

yasd是一款基于PHP扩展的命令行调试工具,可以用于调试PHP代码的性能和错误。yasd的全称是Yet Another Swoole Debugger,它是Swoole官方提供的一款PHP调试工具,但是它不仅仅支持Swoole,也可以在其他PHP应用中使用。

2. yasd的安装与使用

2.1. 安装

yasd的安装需要先安装Swoole扩展,可以参考Swoole官方文档进行安装。安装完Swoole扩展后,可以通过pecl进行安装yasd:

pecl install yasd

如果提示找不到yasd包,可以尝试通过源码进行安装,先在yasd的github页面下载代码:

git clone https://github.com/swoole/yasd.git

然后进入yasd目录,执行:

phpize

./configure

make && make install

执行完上述命令后,yasd扩展就安装成功了,可以在php.ini中添加以下配置开启yasd扩展:

[yasd]

yasd.enable=on

yasd.excludes=nothing

yasd.swoole_hook_flags=0x7fffffff

2.2.使用

使用yasd进行调试需要在命令行下执行PHP代码,例如:

php -d yasd.enable=on -d yasd.dump=on your_script.php

以上命令会在调试前输出所有变量的信息,并且在脚本执行结束时覆盖输出。yasd提供了很多命令可以用于调试,常用的命令有:

break:设置断点

clear:清除断点

run:运行脚本

next:执行下一行代码

step:进入函数

finish:退出函数

print:打印变量信息

yasd的命令使用方式可以通过help命令查看详细说明。

3. 使用yasd进行debug

yasd的最大优势是支持断点调试,可以帮助我们快速定位问题所在。以下以PHPStorm为例,介绍如何使用yasd进行debug。

3.1. 配置PHPStorm

首先,需要在PHPStorm中添加一个调试配置。选择Run -> Edit Configurations,点击左上角的“+”,选择“PHP Remote Debug”:

在服务器配置中配置host和port,可以在yasd命令行中看到host和port:

 Listening at 0.0.0.0:9500

在Path mappings中配置本地路径和服务器上目录的映射关系,例如:

这样就配置好了调试环境,可以点击“Debug”按钮启动调试。

3.2. 设置断点

启动调试后,可以在PHPStorm中选择要调试的PHP脚本,然后在需要断点的行上点击鼠标左键,就可以添加断点了:

3.3. 运行调试

设置好断点后,可以启动调试运行脚本。调试运行脚本时,可以在命令行输入命令调试。

例如,运行完第一步后,执行next命令就会执行下一行代码,执行step命令就会进入函数中调试:

Step #1.

your_script.php:5: $a = 1;

>>>next

Step #2.

your_script.php:6: $b = 2;

>>>step

your_script.php:7: function foo() {

$c = 3;

$d = 4;

}

>>>print $c

PHP Notice: Undefined variable: c in your_script.php on line 7

Notice: Undefined variable: c in your_script.php on line 7

>>>print $d

PHP Notice: Undefined variable: d in your_script.php on line 7

Notice: Undefined variable: d in your_script.php on line 7

可以看到,执行step进入函数后,yasd不能正确识别函数内部的变量,这是因为如果要显示函数内部变量,需要调用函数的参数或返回值,例如:

'>>>print foo()'

这样就可以在yasd命令行中看到函数的参数和变量了。

4. yasd的优缺点

4.1. 优点

支持断点调试,可以快速定位问题

具有命令行界面,方便使用

性能较好,对于长时间运行的PHP脚本也可以进行调试

支持异步编程,可以调试协程、异步IO等场景

4.2. 缺点

不支持PHP7以上版本,只能在PHP5.x或PHP7.0以下版本中使用

需要安装Swoole扩展和yasd扩展,安装比较麻烦

由于yasd是基于Swoole开发的,可能会有一些Swoole特有的问题

5. 总结

yasd是一款基于PHP扩展的命令行调试工具,可以用于调试PHP代码的性能和错误。它支持断点调试、命令行操作,性能较好,适用于长时间运行的PHP脚本等场景。但是需要安装Swoole扩展和yasd扩展,不支持PHP7以上版本。