Как запустить Xdebug 3 на Vagrant / Homestead с VSCode (на Big Sur Mac)

Внезапно, с новой установкой Vagrant/Homestead с недавно установленным Big Sur (macOS), моя (старая) конфигурация Xdebug по какой-то причине не захотела работать с моим VSCode.

Я потратил несколько часов, пытаясь понять это, пробуя множество различных настроек, но безуспешно. Xdebug не хотел работать.

Итак, как его правильно настроить, чтобы он работал?

4 ответа

Основная причина того, что он больше не работает правильно, заключается в том, что внезапно с новейшей версией Homestead у нас появился Xdebug в версии 3, который меняет многие параметры Xdebug 2. Это в основном упрощает дело, но также нарушает предыдущие настройки. Вы можете прочитать больше об изменениях, внесенных в переменные конфигурации в 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.remote_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-fpm к: sudo service php7.3-fpm reload

  2. Для macOS (на моем компьютере с Windows в этом не было необходимости) вам необходимо:

Убедитесь, что вы создали псевдоним адреса хоста в MacOS, а 10.254.254.254 - псевдоним вашего локального хоста.

При выполнении: sudo ifconfig lo0 alias 10.254.254.254. Что более подробно также объясняется здесь .

  1. Установите расширение VSCode PHP Debug ( 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

Как видите, нужно правильно настроить множество разных вещей в разных местах, чтобы это работало. Требуется много поисков и терпения, поэтому я подумал, что было бы полезно разместить это здесь для вас и для моих будущих установок. :)

спасибо за исследование

он отлично работает у меня до xdebug 3

но я не понимаю, почему "xdebug.client_host = 10.254.254.254"

я спросил, потому что это сработало для меня

Мне удается достичь точки останова, когда я использую cli, но не в браузере

для 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

PS

Протестировано на NetBeans и Vagrant (усадьба Laravel) с php 7.4, хост - WIN-10

Прежде всего, убедитесь, какая версия PHP-FPM работает на вашем сайте ( замените laravel.test на имя вашего настроенного сайта). Помните, что вы можете файле выбрать версию PHP для использования для каждого сайта в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

NB: 192.168.10.1 - это по умолчанию IP-адрес хост-машины в VirtualBox , он должен отличаться от вашего фактического 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",
            "type": "php",
            "request": "launch",
            // "stopOnEntry": true,
            "pathMappings": {
                "/home/vagrant/laravel.test": "${workspaceFolder}"
            },
            "port": 9003
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9003
        }
    ]
}

PS. я держу "stopOnEntry": true прокомментировал, чтобы я мог просто раскомментировать его, когда это необходимо, в противном случае я просто использую точки останова в vscode.

Другие вопросы по тегам