我如何配置Xdebug浏览器使用Laravel Sail?



我创建了一个新的Laravel项目与Laravel Sail使用WSL + Docker桌面;一切都很顺利。

我想设置Xdebug用于浏览器使用,但我不能让它工作。

如何在Laravel Sail中配置Xdebug用于浏览器使用?我尝试了一些解决方法,但都不奏效。

以下是我所采取的步骤:
  • 我将这行添加到我的.env文件的文档中:
SAIL_XDEBUG_MODE=develop,debug,coverage
  • 然后我将docker文件发布到我的项目根目录,并在./docker/8.1/
  • 中的dockerfile文件中添加了这一行
COPY ext-xdebug.ini /etc/php/8.1/cli/conf.d/ext-xdebug.ini
  • 然后在相同的目录下创建文件:
[xdebug]
xdebug.start_with_request=yes
xdebug.discover_client_host=true
xdebug.max_nesting_level=256
xdebug.remote_handler=dbgp
xdebug.client_port=9003
xdebug.idekey=VSCODE
xdebug.mode=debug
xdebug.client_host=host.docker.internal
  • 然后用
  • 重建容器中的所有内容
sail build --no-cache

我在VS Code中安装了PHP Debug扩展并创建了一个launch.json文件,如下所示:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
}
}
]
}

现在,当我尝试通过设置断点并运行调试器来调试文件时,什么都没有发生,浏览器没有触发VSCode。

PHP容器输出:

Xdebug:[步骤调试]无法连接到调试客户端。try: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port)

docker-compose文件:

version: '3'
services:
laravel.test:
build:
context: ./docker/8.1
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.1/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mariadb
- redis
- mailhog
mariadb:
image: 'mariadb:10'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sail-mariadb:/var/lib/mysql'
- './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test: ["CMD", "redis-cli", "ping"]
retries: 3
timeout: 5s
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- '${FORWARD_MAILHOG_PORT:-1025}:1025'
- '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sail-mariadb:
driver: local
sail-redis:
driver: local

感谢@LazyOne,我能在漫长的一天后让它工作。

方法如下:

对于我目前使用的Laravel 9.40.1,你不需要编辑任何dockerfile或发布Sail的配置。

只需安装PHP调试vscode扩展并创建一个启动。json文件。

添加以下配置:

{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"hostname": "localhost"
}

在.env文件中添加两行:

SAIL_XDEBUG_MODE=develop,debug
SAIL_XDEBUG_CONFIG="client_host=host.docker.internal idekey=VSCODE"

重启容器sail restart

现在只要设置你的断点并运行调试器,一切都应该工作了。

最新更新