如何使用 VSCode 在 Vagrant / Homestead 上运行 Xdebug 3在 Big Sur Mac 上

问题描述

突然,新安装的 Vagrant/Homestead 运行新安装的 Big Sur (macOS),我的(旧)Xdebug 配置出于某种原因不想与我的 VSCode 一起使用。

我花了好几个小时试图弄清楚,尝试了许多不同的设置,但没有运气。 Xdebug 不想工作。

那么如何正确设置以使其正常工作?

解决方法

它不再正常工作的主要原因是突然在最新版本的 Homestead 中,我们在版本 3 中有一个 Xdebug,它改变了 Xdebug 2 的许多选项。它主要简化了事情,但也破坏了以前的设置。您可以在他们的页面上read more about the changes done to configuration variables in Xdebug 3

为了让 Xdebug 在 Homestead / Vagrant / macOS (Big Sur) 上工作,这些是所需的步骤。

  1. 您必须找到 xdebug.ini 位置,这很容易显示 phpinfo() 并检查路径,在我的情况下是:/etc/php/7.3/fpm/conf.d/20-xdebug.ini

  2. 打开并编辑:sudo vi /etc/php/7.3/fpm/conf.d/20-xdebug.ini

我的配置如下:

zend_extension=xdebug.so
xdebug.client_port = 9003
xdebug.max_nesting_level = 512

xdebug.mode=debug
xdebug.start_upon_error = true
xdebug.idekey = VSCODE

; The MacOS way
xdebug.discover_client_host = false
xdebug.client_host = 10.254.254.254

已经改变的事情:

  • 端口 - 现在是 9003,
  • 用于调试设置 - 现在使用这个简单选项设置了许多选项:xdebug.mode=debug
  1. 您必须通过以下方式保存文件并重新启动 php-fpmsudo service php7.3-fpm reload

  2. 对于 macOS(在我的 Windows 机器上不需要),您必须:

确保您已经创建了一个 Host address alias on MacOS 并且 10.254.254.254 别名为您的本地主机。

通过这样做:sudo ifconfig lo0 alias 10.254.254.254。 也更详细地解释了here

  1. 安装 VSCode PHP 调试 (vscode-php-debug) 扩展。

  2. 通过单击左侧菜单中的调试图标来配置 VSCode,然后编辑包含调试器配置的 JSON 文件。

粘贴:

{
    "version": "0.2.0","configurations": [
        {
            "name": "My XDebug on Homestead","type": "php","request": "launch","pathMappings": {
                "/home/vagrant/code/myproject": "${workspaceFolder}"
            },"port": 9003
        }
    ]
}
  1. 最后安装 Chrome Xdebug Helper 扩展,并在需要调试时打开(绿色错误)调试模式。

  2. 还有一件事。如果您想启用/禁用 Xdebug,假设出于性能原因,有一种非常简单快捷的方法可以做到这一点。

启用:

sudo phpenmod xdebug
sudo service php7.3-fpm reload

禁用:

sudo phpdismod xdebug
sudo service php7.3-fpm reload

如您所见,必须正确设置不同位置的许多不同内容才能使其正常工作。这需要大量的谷歌搜索和耐心,所以我认为把它放在这里对你和我未来的安装很有用。 :)

,

首先,确定您的站点运行的是哪个版本的 PHP-FPM(laravel.test 更改为您配置的站点的名称)。请记住,您可以choose the PHP version to use for each site in the Homested.yaml 文件。

$ cat /etc/nginx/sites-available/laravel.test | grep fastcgi_pass
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;

这将告诉您在 Homestead 虚拟机中编辑哪个配置文件(注意:将 8.0 更改为您的 PHP 版本,如果不同)。

$ sudo nano /etc/php/8.0/fpm/conf.d/20-xdebug.ini 

在这里,您可以删除所有以 xdebug.* 开头的行,而是添加这些行:

xdebug.mode=debug
xdebug.client_host=192.168.10.1
xdebug.client_port=9003
xdebug.max_nesting_level = 512

注意: 192.168.10.1 is by default the IP address of the host machine in VirtualBox,它应该与您在 LAN 中的实际 IP 地址不同。请注意,max_nesting_level 不是必需的,它是 Homestead 的默认值,所以我将其留在那里。

现在在主机上的 Visual Studio Code 中,您可以将 launch.json 文件设置为以下内容:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information,visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0","configurations": [
        {
            "name": "Listen for Xdebug",// "stopOnEntry": true,"pathMappings": {
                "/home/vagrant/laravel.test": "${workspaceFolder}"
            },"port": 9003
        },{
            "name": "Launch currently open script","program": "${file}","cwd": "${fileDirname}","port": 9003
        }
    ]
}

附注。我保留 "stopOnEntry": true 注释,以便在需要时可以简单地取消注释,否则我只是在 vscode 中使用断点。

,

适用于 Xdebug 3.0.3 版

  1. 设置 IDE 使用调试端口 - 9003

  2. 修改/etc/php/7.x/fpm/conf.d/20-xdebug.ini

zend_extension = xdebug.so
xdebug.remote_port = 9003
xdebug.max_nesting_level = 512
xdebug.mode = debug
xdebug.client_host = 192.168.10.1

如果 Homestead.yaml 包含 IP 地址的不同子网,则此 IP 地址可能不同...

顺便说一句,编辑20-xdebug.ini后,像这样重新启动FPM

$ sudo service php7.4-fpm restart

并重新启动浏览器和 IDE

附注

在 NetBeans 和 Vagrant(Laravel homestead)上测试,使用 php 7.4,主机 - WIN-10

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...