Почему XDebug заставляет страницу зависать при загрузке в расширении отладки PHP кода Visual Studio? - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь отладить php в коде Visual Studio.Это мой первый проект после установки расширения PHP Debug (а также PHP и XDebug в качестве зависимостей).Страница отображается правильно, если у меня есть целевой исполняемый файл PHP в командной строке "C: \ php> php -S 0.0.0.0:9000 c: \ users \ landerson \ documents \ vs_proj \ php_example \ index.php".Однако, если я начну отладку в Visual Studio с конфигурацией «Listen for XDebug», страница будет зависать при загрузке, пока я не остановлю процесс отладки.

Я слежу за записью в блоге Microsoft, объясняющей первоначальную настройку: https://blogs.msdn.microsoft.com/nicktrog/2016/02/11/configuring-visual-studio-code-for-php-development/. Я подозреваю, что не совсем понимаю инструкцию «Убедитесь, что ваш корневой веб-сервер указывает на ваш проект, и каждый раз, когда вы запрашиваете файл PHP», это может сбить меня с толку.Я пытался с и без выполнения записи командной строки.Кажется, это влияет только на то, что происходит после того, как я прекращаю процесс отладки.Я ввел свои результаты phpinfo () в https://xdebug.org/wizard.php и следовал инструкциям.У меня нет ни index.php, ни php.ini в C: \ php, а оба в c: \ users \ landerson \ documents \ vs_proj \ php_example

index.php

<?php
$myvar = "Hello ";
$myvar = $myvar . "PHP World!";

echo $myvar;

?>

Нижняя часть php.ini

zend_extension = C:\php\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll

[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1

C: \ Users \ landerson \ AppData \ Roaming \ Code \ User \ settings.json

{
    //"http.proxyStrictSSL": false,

    "php.validate.enable": true,
    "php.validate.executablePath": "C:\\php\\php.exe",
    "php.validate.run": "onType"
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

Я ожидаю, что, по крайней мере, без точек останова будет загружаться страница, а для добавления точек останова будет использоваться расширение PHP Debug.Кажется, что Visual Studio Code, по крайней мере, заставляет XDebug начать прослушивание на порту 9000, но по какой-то причине он не работает должным образом.

1 Ответ

0 голосов
/ 28 января 2019

В итоге я заставил его работать, следуя этому видео: https://www.youtube.com/watch?v=a14kN2u5nEk от Lyall van der Linde.Среди других ошибок я не должен был настраивать и службу, и расширение на один и тот же порт.

Небольшая странность на данный момент заключается в том, насколько я могу судить, что у XDebug в настоящее время нет выпуска дляPHP 32-битная версия 7.3.1, поэтому я установил старую версию XAMPP (7.2.14).Старые версии установщика Windows доступны по адресу https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/. Я установил самую последнюю версию кода Visual Studio.Я добавил расширение PHP Debug в код Visual Studio и перезагрузил приложение.

Поскольку IIS использует порт 80, я открыл панель управления XAMPP и перешел к главному уровню конфигурации, затем к настройкам службы и порта и установилна вкладке apache имя службы Apahce2.4 для основного порта 8080 и SSL-порта 443. Я отредактировал C: \ xampp \ apache \ conf \ httpd.conf и заменил «Listen 80» на «Listen 8080».Затем я запустил службу apache на панели управления XAMPP.

Затем я добавил папку «phptest» в C: \ xampp \ htdocs \ и открыл указанную папку в VSCode.Добавлен файл test.php и добавлены строки:

<?php

$a = 6;
$b = 3;
$c = 0;

$c = $a * $b;

echo $c;

Я обновил пользовательские настройки VSCode следующим образом

{
    "php.validate.enable": true,
    "php.validate.executablePath": "C:\\xampp\\php\\php.exe",
    "php.validate.run": "onType"
}

Я открыл вывод http://localhost:8080/phptest/test.php как «18».

Я открыл http://localhost:8080/dashboard/phpinfo.php,, скопировал текст этой страницы и вставил результаты в форму ввода в https://xdebug.org/wizard.php. Это побудило меня скачать правильную dll для XDebug (php_xdebug-2.6.1-7.2-vc15.dll для меня).Затем я отредактировал C: \ xampp \ php \ php.ini и добавил в конец файла:

[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
zend_extension = C:\xampp\php\ext\php_xdebug-2.6.1-7.2-vc15.dll

Из-за изменения php.ini мне нужно было остановить и перезапустить службу Apache вПанель управления XAMPP.Затем я выбрал «Debug» в левой части кода Visual Studio и добавил конфигурацию PHP «Listen for XDebug» и использовал стандартный запуск. 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",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

Я добавил точку останова в test.php и запустилотладка в коде Visual Studio.В моем браузере я перешел на localhost: 8080 / phptest / test.php, и моя точка останова была достигнута в коде Visual Studio, что позволило мне просмотреть значения переменных и пройти по коду.

...