如果Vessel不停止步进Laravel,请检查Xdebug的版本


总览

由于在Vessel的PHP环境中安装了Xdebug的主要版本升级,因此在运行时无法停止远程步进。
为了执行步骤执行,必须将Vessel的设置更改为与Xdebug 3对应的内容。

什么是船只

Vessel是使用Docker的Laravel应用开发环境

船只-Laravel的Docker开发环境
https://vessel.shippingdocker.com/

什么是Xdebug

PHP调试扩展

Xdebug-用于PHP的调试器和探查器工具
https://xdebug.org/

步骤执行不停止的原因

  • 在创建环境时,Vessel将使用PECL安装最新版本的Xdebug。
  • Xdebug 3于2020年11月25日发布。
  • 从Xdebug 3开始,更改了php.ini中指定的远程调试设置,但是Vessel现在是Xdebug 2设置。
  • Xdebug 3发行后构建的容器开发环境无法在不更改设置的情况下使用Xdebug进行远程调试。

Xdebug 3发生了什么变化

从Xdebug 2升级到3
https://xdebug.org/docs/upgrade_guide

下面,仅总结要点,

1.启用步骤执行的设置已更改

Xdebug 2:xdebug.remote_enable = 1
Xdebug 3:xdebug.mode=debug

2.从Xdebug连接的地址的设置项目已更改

Xdebug 2:xdebug.remote_host = ホスト名/IPアドレス
Xdebug 3:xdebug.client_host = ホスト名/IPアドレス

3.从Xdebug连接的端口的设置项目和端口号已更改

Xdebug 2:xdebug.remote_port = 9000
Xdebug 3:xdebug.client_port = 9003

Xdebug 3配置概念

与在每个功能的设置中启用的Xdebug 2相反,Xdebug 3似乎认为通过指定"模式"将其设置为所需的状态。设置此模式为xdebug.mode

之后,设置项目remote_*变为client_*
对于Xdebug 2,从Xdebug的angular来看,开发环境意味着"远程",但是
Xdebug 3可能意味着Xdebug在"服务器"上运行并正在开发的本地环境是"客户端"。
我认为这是直观且易于理解的,但是兼容...

使Vessel设置与Xdebug 3兼容的步骤

创建容器开发环境

首先,按照常规步骤创建一个Vessel开发环境。

↓单击此处,了解官方网站上的步骤

入门
https://vessel.shippingdocker.com/docs/get-started/

创建开发环境后,检查应用程序是否正常运行。

更改Xdebug设置

更改设置的文件

docker/app/xdebug.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
% tree
.
├── LICENSE
├── README.md
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── docker
│   ├── app
│   │   ├── Dockerfile
│   │   ├── default
│   │   ├── h5bp
│   │   ├── start-container
│   │   ├── supervisord.conf
│   │   ├── vessel.ini
│   │   └── xdebug.ini          ← このファイルを編集する
│   ├── mysql
│   │   ├── conf.d
│   │   └── logs
│   └── node
│       └── Dockerfile
├── docker-compose.yml
├── package.json
├── phpunit.xml
├── public
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vendor
├── vessel
└── webpack.mix.js

Xdebug 3设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.idekey=docker
xdebug.remote_host=192.168.1.2
xdebug.max_nesting_level = 500
; ↑ XDebug 2 の設定

; XDebug 3 の設定 ※ここを追加する
xdebug.mode = debug
xdebug.client_host = host.docker.internal ← コンテナから見たホストのIPアドレス
; xdebug.client_port = 9000 ← XDebug 2 と同じポート 9000 に接続する場合はここで指定

host.docker.internal是一种设置,可以自动解析从容器中看到的主机的IP地址
https://docs.docker.jp/docker-for-mac/networking.html

以反映更改的设置

生成并重新启动容器,以使

xdebug.ini设置生效。

1
2
3
./vessel stop
./vessel build
./vessel start

在IDE

中进行必要的设置

由于

Xdebug 3连接的端口已从9000更改为9003,因此将IDE侦听的端口号更改为9003

您可以使用

xdebug.ini将Xdebug 3的连接端口更改为9000

PhpStorp

配置Xdebug --PhpStorm
https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html

Visual Studio

调试配置文件设置示例
https://github.com/aibax/vessel-xdebug3-sample/blob/main/.vscode/launch.json

参考

我为此编写了示例代码
https://github.com/aibax/vessel-xdebug3-sample