使用laravel sail该怎样debug?编辑器是vscode

我按照stackoverflow上的这个回答,在Dockerfile文件添加了

ARG XDEBUG
ARG XDEBUG_PORT
RUN if [ "${XDEBUG}" = 'true' ]; then \
    apt-get update \
    && apt-get install -y php-xdebug \
    && echo "[XDebug]" > /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && echo "zend_extension = \"$(find /usr/lib/php/ -name xdebug.so | sort -z | head -n 1)\"" >> /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && echo "xdebug.client_port = ${XDEBUG_PORT}" >> /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && echo "xdebug.mode = debug" >> /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && echo "xdebug.start_with_request = yes" >> /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && echo "xdebug.client_host = host.docker.internal" >> /etc/php/8.0/cli/conf.d/php-ext-xdebug.ini \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ;\
fi;

然后在docker-compose.yml中添加了两个argsXDEBUGXDEBUG_PORT

version: '3'
services:
    laravel.test:
        build:
            context: ./docker/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
                XDEBUG: '${SAIL_XDEBUG:-false}'
                XDEBUG_PORT: '${SAIL_XDEBUG_PORT:-9000}'

重新build之后Xdebug有了

sail php -v
Cannot load Xdebug - it was already loaded
PHP 8.0.5 (cli) (built: May  3 2021 11:30:57) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.5, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.5, Copyright (c), by Zend Technologies
    with Xdebug v3.0.3, Copyright (c) 2002-2021, by Derick Rethans

但是在vscode里执行debug只有pauserestartstop这三个按钮,请问哪里有问题啊?

使用laravel sail该怎样debug?编辑器是vscode

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

参考 这篇文章
问题解决了,不过不管是按照这篇文章还是开头stackoverflow里的那个回答那样配置,最后运行sail php -v都会提示

$ sail php -v
Cannot load Xdebug - it was already loaded

我的解决方法是注释掉php.ini文件中的zend_extension = xdebug.so,容器内的/etc/php/8.0/mods-available/xdebug.ini里也有相同的语句,可能是两者重复加载了

2年前 评论
讨论数量: 4

补充,这是vscode里debug的配置文件 launch.json

"version": "0.2.0",
    "configurations": [
        {

            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "pathMappings": {
                "/var/www/html" : "${workspaceFolder}"
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
2年前 评论
滚球兽进化 2年前
jeff_coseibai (作者) (楼主) 2年前

参考 这篇文章
问题解决了,不过不管是按照这篇文章还是开头stackoverflow里的那个回答那样配置,最后运行sail php -v都会提示

$ sail php -v
Cannot load Xdebug - it was already loaded

我的解决方法是注释掉php.ini文件中的zend_extension = xdebug.so,容器内的/etc/php/8.0/mods-available/xdebug.ini里也有相同的语句,可能是两者重复加载了

2年前 评论

docker/8.0/Dockerfile 文件改成:

ARG XDEBUG
RUN if [ "${XDEBUG}" = 'true' ]; then \
    apt-get update \
    && apt-get install -y php-xdebug \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ;\
fi;

docker/8.0/php.ini 文件末尾添加

[XDebug]
#这句会引起 Cannot load Xdebug - it was already loaded 所以注释掉, 因为 /etc/php/8.0/mods-available/xdebug.ini 已经设置过 zend_extension = xdebug.so 了
#zend_extension = xdebug.so 

xdebug.client_port = 9000
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal

然后
sail build –no-cache
sail up

就不会出现
Cannot load Xdebug - it was already loaded
这个问题了

2年前 评论

也可以参考这个文章哦~

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!