天天看点

基于Yasd的Hyperf框架调试

准备

基于Yasd的Hyperf框架调试

如果使用PhpStorm调试,仅需要上图所说的这几步

  • 安装 Xdebug 或者 Zend Debugger.
  • 开启 Start Listening for PHP Debug Connections.
  • 配置 Debug 端口,别忘记勾选 Can accept external connections.
  • 打好断点,启动网页进行调试.

安装

安装boost扩展

macOS

brew install boost
           

Ubuntu

apt install libboost-all-dev
           

CentOS

yum install boost boost-devel
           

安装yasd

git clone https://github.com/swoole/yasd.git
phpize --clean && \
phpize && \
./configure && \
make clean && \
make && \
make install
           

设置 php.ini

zend_extension=yasd
           

通过 php --ri yasd 查看配置情况

IDE调试模式
zend_extension=yasd
yasd.debug_mode=remote
yasd.remote_host=127.0.0.1
yasd.remote_port=9999
           

注:因为9000端口与php-fpm冲突,这里设置成9999或者其他,你可以使用其他未使用的端口作为调试端口,修改端口后应与PhpStorm,VSCode里配置的端口保持一致

cmd调试模式
zend_extension=yasd
yasd.debug_mode=cmd
           

注:Yasd已经支持PhpStorm,VSCode断点调试,当配置了IDE模式调试后,yasd就直接可以使用断点调试了,对于简单的调试可以参考文末的参考链接

配置 PhpStorm

PHP 运行环境设置

由于yasd是基于php -e 命令生成的额外调试信息,而PhpStorm默认的调试并不带有 -e 的参数,所以我们需要在单元测试前做一些改进,我是通过编写一个shell脚本的方式来实现的

cat ~/bin/php

#!/usr/bin/env zsh
/usr/local/bin/php -e "$@"
           
phpstorm设置

然后在PhpStorm中添加该脚本作为php的解释器,在PhpStorm的Preferences -> Languages & Frameworks -> PHP面板中添加CLI Interpreters,选择配置的解释器后点击Apply。

基于Yasd的Hyperf框架调试
PHPUnit设置

因为Hyperf是基于Swoole协程框架,原生的phpunit是无法调试的,需要使用Hyperf提供的co-phpunit,可以在PhpStorm的Preferences -> Languages & Frameworks -> PHP -> Test Frameworks面板中本地环境

点击面板中的“+”添加PHPUnit Local,选择Path to phpunit.phar,在Path中选择当前项目的vendor/bin/co-phpunit文件,在Run Tester的Default configration file中选择当前项目中的phpunit.xml文件,点击Apply。

基于Yasd的Hyperf框架调试

调试单元测试前,需要开启 Start Listening for PHP Debug Connections.

基于Yasd的Hyperf框架调试

之后就可以像之前调试Lavavel项目那样断点调试Hyperf了。

注意

当开启Start Listening for PHP Debug Connections(PHP调试连接监听器)后,不论是使用PHPStorm的Debug还是Run都会触发断点调试,所以用完后记得停止PHP调试连接监听器。

参考

Yasd调试器官方文档

另一个Swoole调试器 - Yasd

在IDE中使用yasd调试器