php debug yasd手记

hyperf配置yasd调试环境 | PHP 技术论坛

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

你可以自由的切换两种调试模式,快去试试吧

猜你喜欢

转载自blog.csdn.net/cxs812760493/article/details/128792604