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以上版本。