Возможность отладки ТОЛЬКО при запуске теста - PullRequest
0 голосов
/ 19 февраля 2020

Используя laravel / hometead vagrant box, VS Code и PHP Debug extension, я могу устанавливать точки останова и проходить через код только при запуске теста через phpunit.

Если я получаю доступ к тому же ресурсу через в браузере мои контрольные точки никогда не достигаются.

Исходя из того, что я могу отлаживать при выполнении тестов, я предполагаю, что xdebug работает и настроен правильно.

Мой файл .env:

APP_NAME=lms
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test

Мой файл .env.testing:

APP_NAME=lms
APP_ENV=testing
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=https://lms.test

PHP Конфигурация отладки:

    "configurations": [
        {
            "name": "Listen for XDebug on Homestead",
            "type": "php",
            "request": "launch",
            "pathMappings": {
                "/home/vagrant/code/MyProject": "C:\\Users\\lemon\\source\\vagrant\\MyProject"
            },
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]

app. php

'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10
10.0.2.2

/ etc / php / 7.4 / cli / conf.d / 20-xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512

Я включил ведение журнала xdebug. Когда я запускаю отладчик во время теста, создается журнал, который показывает ожидаемые записи. Если я затем удаляю файл журнала и выполняю GET из браузера, на тот же контроллер, что и в тесте, журнал xdebug не создается.

Может быть, некоторые свободные sh глаза могут определить проблему. Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

В командной строке настройка xdebug.remote_connect_back=1 не действует. В веб-среде он инструктирует Xdebug установить соединение IDE с IP-адресом из заголовков HTTP. Но если на пути есть сеть NAT, как это часто бывает с Docker, Xdebug не может подключиться к IP-адресу из заголовка HTTP и, следовательно, не может быть установлено соединение для отладки.

Когда вы удаляете настройку xdebug.remote_connect_back=1, Xdebug использует исключительно настройку xdebug.remote_host, которую вы уже установили правильно (10.0.2.2).

При использовании Docker вы почти никогда не сможете использовать xdebug.remote_connect_back.

0 голосов
/ 19 февраля 2020

В отчаянии я удалил эти строки из 20-xdebug.ini (и перезапустил службу php), и это сработало.

xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.max_nesting_level = 512

Не знаю почему, но я надеюсь, что это поможет кому-то еще.

...