Как настроить VSCode, PHP Debug и XDebug (Windows 10) - PullRequest
0 голосов
/ 08 марта 2020

Я хочу использовать плагин VSCode 'PHP Debug' с Xdebug для отладки PHP сценариев.

Но когда я выбираю "Отладка | Начать отладку F5", появляется небольшое всплывающее окно отладки, и я я застрял Кнопки Пауза, Перезапуск, Стоп активны. Кнопки для перехода в, неактивные (неактивные). В консоли отладки ничего не происходит.

(1) VSCode 1.42.1 установлен

(2) XAMPP v3.2.4 запущен и работает

(3) Xdebug установлен с использованием wizzard и вставил мои данные phpinfo (), чтобы определить правильную версию. Когда я запускаю 'admin' из панели управления XAMPP и просматриваю phpinfo, браузер показывает мне (среди многих других вещей):

[...]
This program makes use of the Zend Scripting Language Engine: 
  Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v2.9.2, Copyright (c) 2002-2020, by Derick Rethans
[...]

(4) php.ini имеет

[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.show_local_vars = 1
xdebug.remote_log = "C:\Program Files_\xampp\php\logs\xdebug.log"
zend_extension = "php_xdebug-2.9.2-7.4-vc15-x86_64.dll"

(обратите внимание, что «Program Files_» НЕ является защищенным каталогом «Program Files», XAMPP имеет доступ на запись, как показано для пункта (9) ниже)

(5) путь Windows имеет C:\Program Files_\xampp\php; в

(6), когда я использую расширение Code Runner в VSCode для запуска сценария «Hello World. php», это просто отлично работает

(7) launch.json для отладчика VSCode имеет

"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,
    }
] 

(8) мой брандмауэр Windows имеет правило входящего трафика, разрешающее TCP-трафик c на порт 9000.

(9), когда я просто запускаю код, xdebug .log (см. php.ini) обновляется до

[94396] Log opened at 2020-03-08 07:45:28
[94396] I: Connecting to configured address/port: localhost:9000.
[94396] E: Time-out connecting to client (Waited: 200 ms). :-(
[94396] Log closed at 2020-03-08 07:45:28

Но когда я использую «Отладка | Начать отладку F5», в xdebug.log ничего не происходит.

Это вся информация, которая Я думал, что актуально до сих пор. Что оставляет меня вот так:

me -> update_status("at wit's end")

У вас, волшебники, есть идеи, куда копать? Какой конфигурационный файл настроить? К какому файлу журнала обратиться?

сноска: отладка Python скриптов в VSCode работает так, как и ожидалось.

1 Ответ

0 голосов
/ 10 марта 2020

@ Комментарий LazyOne предоставил подсказку и инструменты, чтобы наткнуться на решение ...

И ответ оказывается довольно смущающим.

Длинная история (как проверить этот VSCode прослушивает порт 9000)

  1. запустите XAMPP, запустите VSCode
  2. откройте ваш php скрипт
  3. установите точку останова
  4. откройте Linux оболочка (я использовал Bash в Ubuntu на Windows)
  5. запустите telnet 0.0.0.0 9000 или telnet localhost 9000 в оболочке и наблюдайте за ошибкой соединения
root ~ $ telnet localhost 9000 
Trying 127.0.0.1... 
telnet: Unable to connect to remote host: Connection refused 
root ~ $ telnet 0.0.0.0 9000
Trying 0.0.0.0... 
telnet: Unable to connect to remote host: Connection refused
запустите отладку и увидите всплывающее окно отладки, как описано выше запустите telnet 0.0.0.0 9000 или telnet localhost 9000 в оболочке и обратите внимание на разницу: вы подключены к VScode!
root ~ $ telnet 0.0.0.0 9000 
Trying 0.0.0.0... 
Connected to 0.0.0.0.
Escape character is '^]'.
нажмите кнопку остановки во всплывающем всплывающем окне отладки и наблюдайте в оболочке
stop -i 1 Connection closed by foreign host.
root ~ $ 

Сделайте вывод, что VSCode действительно прослушивает и 0.0.0.0:9000, и localhost: 9000.

почесать голову и go вернуться к VSCode начать отладку заметить оранжевую строку состояния внизу с надписью "Listen to XDebug" заметить раскрывающееся меню чуть ниже строки меню с надписью «зеленая стрелка» и «Listen for XDebug» исследуйте выпадающий список и (заново) откройте вторую конфигурацию «Запустить открытый скрипт», поймите / помните, что ваш launch.json было 2 конфигурации нажмите зеленую стрелку, когда выбран «Запустить открытый скрипт», вы увидите сообщение об ошибке, всплывающее по строке «прослушать EARDRINUSE: адрес уже используется ::: 9000» отмените сообщение об ошибке, прекратите отладку, нажав на кнопку остановки всплывающего окна отладки, обратите внимание, что строка меню внизу становится синей нажмите зеленую стрелку, когда "Запустить открытый скрипт" отображается в снова выпадающий список ... и обратите внимание, что отладка начинается, как ожидалось радуйтесь! хвала @LazyOne за помощь! благодарю Бога за сообщество stackoverflow! конфигурация «Listen for XDebug» в launch.json используется для отладки скрипта, который был запущен из сеанса браузера: (i) установите точки останова в VSCode, (ii ) начать отладку с конфигурацией «Listen for XDebug», (iii) запустить сценарии, инициировав запрос в браузере, (iv) наблюдать VSCode, если точка останова срабатывает во время обработки запроса

Short Story

Убедитесь, что в качестве конфигурации выбран «Launch now open script», когда вы начинаете отлаживать ваш php скрипт в VSCode, смотрите скриншот ниже. Just to make sure that you know which drop-down I am talking about

Запоздалая мысль

Я изменил свой launch.json на

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

Таким образом, «Запустить текущий открытый скрипт» по умолчанию и будет использоваться, когда я начну отладку с помощью «Debug | Start Debugging F5» из главного меню.

...