Как запустить 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), выполните следующие действия.
Ты должен найти
xdebug.ini
местоположение, которое легко сделать с отображениемphpinfo()
и проверяем путь, который в моем случае:/etc/php/7.3/fpm/conf.d/20-xdebug.ini
Откройте его и отредактируйте:
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
Вы должны сохранить файл и перезапустить
php-fpm
к:sudo service php7.3-fpm reload
Для macOS (на моем компьютере с Windows в этом не было необходимости) вам необходимо:
Убедитесь, что вы создали псевдоним адреса хоста в MacOS, а 10.254.254.254 - псевдоним вашего локального хоста.
При выполнении:
sudo ifconfig lo0 alias 10.254.254.254
. Что более подробно также объясняется здесь .
Установите расширение VSCode PHP Debug ( vscode-php-debug ).
Настройте VSCode, щелкнув значок отладки в левом меню, а затем отредактируйте файл JSON, содержащий конфигурацию отладчика.
Вставьте это:
{
"version": "0.2.0",
"configurations": [
{
"name": "My XDebug on Homestead",
"type": "php",
"request": "launch",
"pathMappings": {
"/home/vagrant/code/myproject": "${workspaceFolder}"
},
"port": 9003
}
]
}
Наконец, установите расширение Chrome Xdebug Helper и включите режим отладки (зеленая ошибка), когда вы хотите выполнить отладку.
Одна лишняя вещь. Если вы хотите включить / отключить 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
установить IDE для использования порта отладки - 9003
измените /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.