VSCode + Lando: Xdebug не останавливается

Я безуспешно пытаюсь настроить Xdebug с Lando (v. 3.0.24) с VSCode. Я уже читал официальное руководство плюс другие в Интернете и разные темы с проблемами, похожими на мою, но, увы, я не мог заставить его работать.

Мой файл lando, который находится внутри docroot папка:

      name: mysite
recipe: drupal9
services:
  appserver:
    webroot: .
    xdebug: debug
    config:
      php: ../.vscode/php.ini

Файл php.ini:

      [PHP]

; Xdebug
xdebug.max_nesting_level = 256
xdebug.show_exception_trace = 0
xdebug.collect_params = 0
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = ${LANDO_HOST_IP}
xdebug.log = /tmp/xdebug.log

; Remote settings
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = ${LANDO_HOST_IP}
; xdebug.remote_connect_back = 1
xdebug.remote_log = /tmp/xdebug_remote.log

И, наконец, файл launch.json:

      {
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug (9003)",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "log": true,
      "pathMappings": {
        "/app/": "${workspaceRoot}/",
      }
    }
  ]
}

Кстати, я не уверен, как установить pathMappings, поэтому я пробовал разные комбинации, например

  • "/ app /": "$ {workspaceRoot} /",
  • "/ app /": "$ {workspaceRoot} / docroot",
  • "/ app /": "$ {workspaceFolder} /",
  • "/ app /": "$ {workspaceFolder} / docroot",

В любом случае проблема в том, что Xdebug не останавливается на точке останова.

Если я просматриваю xdebug.log, я вижу:

      www-data@6137da628b8c:/app$ tail -f /tmp/xdebug.log                                         [186] [Step Debug] INFO: Checking remote connect back address.
[186] [Step Debug] INFO: Checking header 'HTTP_X_FORWARDED_FOR'.
[186] [Step Debug] INFO: Checking header 'REMOTE_ADDR'.
[186] [Step Debug] INFO: Client host discovered through HTTP header, connecting to 172.20.0.1:9003.
[186] [Step Debug] WARN: Creating socket for '172.20.0.1:9003', poll success, but error: Operation now in progress (29).
[186] [Step Debug] WARN: Could not connect to client host discovered through HTTP headers, connecting to configured address/port: 172.24.0.1:9003. :-|
[186] [Step Debug] WARN: Creating socket for '172.24.0.1:9003', poll success, but error: Operation now in progress (29).
[186] [Step Debug] ERR: Could not connect to debugging client. Tried: 172.20.0.1:9003 (from REMOTE_ADDR HTTP header), 172.24.0.1:9003 (fallback through xdebug.client_host/xdebug.client_port) :-(
[186] Log closed at 2021-01-05 17:11:27.454926

[192] Log opened at 2021-01-05 17:12:03.777860
[192] [Step Debug] INFO: Checking remote connect back address.
[192] [Step Debug] INFO: Checking header 'HTTP_X_FORWARDED_FOR'.
[192] [Step Debug] INFO: Client host discovered through HTTP header, connecting to 172.20.0.1:9003.
[192] [Step Debug] INFO: Connected to debugging client: 172.20.0.1:9003 (from HTTP_X_FORWARDED_FOR HTTP header). :-)
[192] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///app/index.php" language="PHP" xdebug:language_version="7.4.13" protocol_version="1.0" appid="192"><engine version="3.0.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>

[192] [Step Debug] <- breakpoint_list -i 1
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="1"></response>

[192] [Step Debug] <- breakpoint_list -i 2
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="2"></response>

[192] [Step Debug] <- breakpoint_set -i 3 -t line -f file:///app/docroot/sites/default/settings.local.php -n 873
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3" id="1920001"></response>

[192] [Step Debug] <- breakpoint_set -i 4 -t line -f file:///app/docroot/test.php -n 3
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="4" id="1920002"></response>

[192] [Step Debug] <- breakpoint_list -i 5
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="5"><breakpoint type="line" filename="file:///app/docroot/test.php" lineno="3" state="enabled" hit_count="0" hit_value="0" id="1920002"></breakpoint><breakpoint type="line" filename="file:///app/docroot/sites/default/settings.local.php" lineno="873" state="enabled" hit_count="0" hit_value="0" id="1920001"></breakpoint></response>

[192] [Step Debug] <- breakpoint_list -i 6
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_list" transaction_id="6"><breakpoint type="line" filename="file:///app/docroot/test.php" lineno="3" state="enabled" hit_count="0" hit_value="0" id="1920002"></breakpoint><breakpoint type="line" filename="file:///app/docroot/sites/default/settings.local.php" lineno="873" state="enabled" hit_count="0" hit_value="0" id="1920001"></breakpoint></response>

[192] [Step Debug] <- run -i 7
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="run" transaction_id="7" status="stopping" reason="ok"></response>

[192] [Step Debug] <- stop -i 8
[192] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="stop" transaction_id="8" status="stopped" reason="ok"></response>

[192] Log closed at 2021-01-05 17:12:21.963742

Так, может быть, Xdebug все еще не может подключиться к правильному IP? В любом случае, есть идеи, как решить \ заставить это работать? Спасибо

РЕДАКТИРОВАТЬ: если я переместу файл lando.yml из папки doocroot в папку выше, я могу получить несколько рабочую ситуацию, когда Xdebug фактически остановится в VSCode. Однако есть еще две проблемы:

  1. Нельзя использовать lando drushбольше. Обходной путь для этого: lando composer require drush/drush но понятия не имею, почему «глобальная» паника Ландо не работает.
  2. команды терминала - например, drush - похоже, не работают с xdebug (очень незначительная проблема, по крайней мере, для меня), поскольку они возвращают

Xdebug: [Step Debug] Не удалось подключиться к клиенту отладки. Пробовал: 172.31.206.147:9003 (откат через xdebug.client_host / xdebug.client_port) :-(

Ниже обновленных файлов php.ini и lando.yml файл launch.json аналогичен указанному выше.

      [PHP]

; Xdebug
xdebug.max_nesting_level = 512
xdebug.show_exception_trace = 0
xdebug.collect_params = 0
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = ${LANDO_HOST_IP}
xdebug.log = /tmp/xdebug.log
xdebug.remote_log = /tmp/xdebug_remote.log

name: myproject
recipe: drupal9
services:
  appserver:
    webroot: docroot
    xdebug: debug
    config:
      php: .vscode/php.ini

1 ответ

Я не уверен, что это ваш случай, но я расскажу вам, как я решил эту проблему:

Я решил, что указывает мой error_log на допустимое место, добавив эту строку в мой php.ini (в /etc/php/7.4/cli/php.ini):

      error_log = /var/www/log/php_error.log

Измените это местоположение на любой допустимый каталог, который хотите, и повторите попытку. Предупреждение должно исчезнуть из вашего вывода и теперь перейдет в файл журнала.

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