yasd 调试器 v0.2.5 版本发布,支持 PHP8 以及在 IDE 中使用调试 - 知乎
GitHub - swoole/yasd: Yet Another Swoole Debugger
方式一
Docker
Dockerfile 采用 hyperf 的镜像文件,额外添加了 yasd 的扩展。
# hyperf/hyperf:7.4
#
# @link https://www.hyperf.io
# @document https://doc.hyperf.io
# @contact [email protected]
# @license https://github.com/hyperf/hyperf/blob/master/LICENSE
ARG ALPINE_VERSION
FROM hyperf/hyperf:7.4-alpine-v${ALPINE_VERSION}-base
LABEL maintainer="Hyperf Developers <[email protected]>" version="1.0" license="MIT"
ARG SW_VERSION
ARG COMPOSER_VERSION
##
# ---------- env settings ----------
##
ENV SW_VERSION=${SW_VERSION:-"v4.6.1"} \
COMPOSER_VERSION=${COMPOSER_VERSION:-"2.0.2"} \
# install and remove building packages
PHPIZE_DEPS="autoconf dpkg-dev dpkg file g++ gcc libc-dev make php7-dev php7-pear pkgconf re2c pcre-dev pcre2-dev zlib-dev libtool automake"
# update
RUN set -ex \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
# for swoole extension libaio linux-headers
&& apk add --no-cache libstdc++ openssl git bash \
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS libaio-dev openssl-dev curl-dev \
# download
&& cd /tmp \
&& curl -SL "https://github.com/swoole/swoole-src/archive/${SW_VERSION}.tar.gz" -o swoole.tar.gz \
&& curl -SL "https://gitee.com/ls-yw/yasd/repository/archive/v0.3.7?format=tar.gz" -o yasd.tar.gz \
&& ls -alh \
# php extension:swoole
&& cd /tmp \
&& mkdir -p swoole \
&& tar -xf swoole.tar.gz -C swoole --strip-components=1 \
&& ln -s /usr/bin/phpize7 /usr/local/bin/phpize \
&& ln -s /usr/bin/php-config7 /usr/local/bin/php-config \
&& ( \
cd swoole \
&& phpize \
&& ./configure --enable-openssl --enable-http2 --enable-swoole-curl --enable-swoole-json \
&& make -s -j$(nproc) && make install \
) \
&& echo "memory_limit=1G" > /etc/php7/conf.d/00_default.ini \
&& echo "opcache.enable_cli = 'On'" >> /etc/php7/conf.d/00_opcache.ini \
&& echo "extension=swoole.so" > /etc/php7/conf.d/50_swoole.ini \
&& echo "swoole.use_shortname = 'Off'" >> /etc/php7/conf.d/50_swoole.ini \
# yasd debug
&& apk add --no-cache boost boost-dev \
&& cd /tmp \
&& mkdir -p yasd \
&& tar -xf yasd.tar.gz -C yasd --strip-components=1 \
&& ( \
cd yasd \
&& phpize \
&& ./configure \
&& make && make install \
) \
&& echo "zend_extension=yasd.so" > /etc/php7/conf.d/50_yasd.ini \
&& echo "yasd.debug_mode=remote" >> /etc/php7/conf.d/50_yasd.ini \
&& echo "yasd.remote_host=172.16.13.27" >> /etc/php7/conf.d/50_yasd.ini \
&& echo "yasd.remote_port=9000" >> /etc/php7/conf.d/50_yasd.ini \
# install composer
&& wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
&& chmod u+x /usr/local/bin/composer \
# php info
&& php -v \
&& php -m \
&& php --ri swoole \
&& composer \
# ---------- clear works ----------
&& apk del .build-deps \
&& rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/local/bin/php* \
&& echo -e "\033[42;37m Build Completed :).\033[0m\n"
github composer源平替
wget -nv -O /usr/local/bin/composer https://getcomposer.org/download/2.0.2/composer.phar
构建镜像
docker build -f Dockerfile -t php7.4-alpine-v3.11-swoole:v4.6.1-ext --build-arg ALPINE_VERSION=3.11 --build-arg SW_VERSION=v4.6.1 .
启动容器
docker run --name demo -e PHP_IDE_CONFIG="serverName=hyperf" -v E:\code\project:/data/project -p 58006:58006 -p 9000:9000 -p 9501:9501 -itd --privileged -u root --entrypoint /bin/sh php7.4-alpine-v3.11-swoole:v4.6.1-ext
php -v 检查 yasd 是否安装成功,出现 Yasd 相关则表示成功了
phpstorm
debug 配置
Server 的 name 注意和容器的 PHP_IDE_CONFIG 环境变量保持一致
点击小电话启动监听
PHP配置docker容器内解析器
/etc/php7/conf.d/50_yasd.ini 的remote_port要改成宿主机ipconfig的ip
结果
启动服务 php -e bin/hyperf.php start
浏览器请求打上断点的接口,phpstorm 输出调试窗口。
hyperf 要注意在代理类中打断点
方式二
安装 yasd
在编译安装之前你需要安装boost
库。
alpine:
apk add boost
macOS:
brew install boost
Ubuntu:
apt-get install libboost-all-dev
CentOS:
yum install boost boost-devel
拉取 master 分支的源码,或者从 GitHub 下载对应的release 版本
git clone https://github.com/swoole/yasd.git
常规编译流程
phpize --clean && \
phpize && \
./configure && \
make clean && \
make && \
make install
可能问题
没有phpize:
#安装pecl
wget http://pear.php.net/go-pear.phar -O go-pear.php
php go-pear.php
#安装phpize
apk search phpize
apk add php7-dev
#安装依赖
apk add gcc g++ make
执行 ./configure 时
checking whether g++ accepts -g... no
checking for boost... configure: error: lib boost not found. Try: install boost library
解决:
apk add boost
发现还是不行,search了之后,
apk search boost
# 又装了这个
apk add --no-cache boost boost-dev
# 更新了apk
apk update
# 指定了boost配置
./configure --boost=/usr/include/boost
# 查看apk信息
apk info
# 尝试更新boost
apk upgrade boost
# 又改了boost的根目录指向
export BOOST_ROOT=/usr/include/boost
apk search gcc
apk add gc++
apk search g++
apk add g++
最后发现原来是少了g++扩展
还有 no acceptable C compiler found in $PATH,代表你没有安装C编译器
# 安装
yum -y install gcc-c++
# 检查是否安装成功
gcc -v
修改 php.ini 文件:
zend_extension=yasd
特别注意这里是zend_extension
,有些小伙伴用不起来就是因为写成了extension
查看扩展是否安装成功
php --ri yasd
如果你要使用 IDE 模式调试,还需要额外添加一些配置
zend_extension=yasd
yasd.debug_mode=remote
yasd.remote_host=127.0.0.1
yasd.remote_port=9000
我这边是这样配的
zend_extension=yasd.so
yasd.debug_mode=remote
yasd.remote_host=192.168.0.115
yasd.remote_port=9006
9006做了挂载,192.168.0.115是ipconfig取到的ip
在容器内执行以下命令,server名和phpstorm对应(重启容器可能要重新执行一遍):
export PHP_IDE_CONFIG="serverName=server"
启动时需要加-e
php -e bin/hyperf.php start
不设置yasd.debug_mode
选项的话,默认就是 cmd 模式调试
zend_extension=yasd
yasd.debug_mode=cmd
你可以自由的切换两种调试模式,快去试试吧