xDebug с dbgpProxy

Вопрос или проблема

Это мой launch.json

{
  "name": "Удаленное прослушивание для Xdebug",
  "type": "php",
  "request": "launch",
  "port": 26357,
  "xdebugSettings": {
    "max_children": 128,
    "max_data": -1,
    "max_depth": 3
  },
  "pathMappings": {
    "/share/ZFS2_DATA/Web/dolibarr-1": "${workspaceRoot}",
    "/share/ZFS2_DATA/Web/dolibarr-2": "${workspaceRoot}",
    "/share/ZFS2_DATA/Web/dolibarr-3": "${workspaceRoot}",
    "/share/ZFS2_DATA/Web/dolibarr-4": "${workspaceRoot}",
  },
  "log": true,
  "proxy": {
    "enable": true,
    "host": "192.168.1.88",
    "port": 26356,
    "key": "VSCODE",
    "allowMultipleSessions": false
  }
},

Это мой 99-xdebug.ini

[xDebug]
zend_extension = xdebug
xdebug.mode = debug,develop
xdebug.remote_handler = "dbgp"
xdebug.remote_cookie_expire_time = 36000
xdebug.start_with_request=trigger
;xdebug.discover_client_host=true
;xdebug.client_host = 192.168.1.57
xdebug.client_host = 127.0.0.1
xdebug.client_port = 26357
xdebug.show_exception_trace=false
xdebug.log = /tmp/xdebug.log
xdebug.log_level=10
xdebug.trigger_value=VSCODE
xdebug.idekey=VSCODE

После этого я запускаю dbgpProxy с ./dbgpProxy -s 0.0.0.0:26357 -i 0.0.0.0:26356

[david@localhost ~]$ ./dbgpProxy -s 0.0.0.0:26357 -i 0.0.0.0:26356
Xdebug DBGp proxy (0.6.1)
Copyright %s by Derick Rethans 2024
2024-11-11 07:20:38.038 [warn] [SSL] Файл 'certs/fullchain.pem' не найден, SSL слушатели не включены
2024-11-11 07:20:38.039 [info] [dbgpProxy] Прокси запущен
2024-11-11 07:20:38.039 [info] [server] Сервер запущен на 0.0.0.0:26357
2024-11-11 07:20:38.039 [info] [server] Клиентский сервер запущен на 0.0.0.0:26356
2024-11-11 07:20:41.436 [info] [server] Начато новое клиентское соединение от 192.168.1.57:11892
2024-11-11 07:20:41.953 [info] [proxyinit] [VSCODE] Добавлено соединение для IDE ключа 'VSCODE': 192.168.1.57:26357
2024-11-11 07:20:41.953 [info] [server] Закрыто клиентское соединение от 192.168.1.57:11892

Вывод в vscode

Регистрация VSCODE на порту 26357 с прокси @ 192.168.1.88:26356
Регистрация успешна

Лог xdebug

[30035] [Step Debug] <- detach -i 1 -- "dbgpProxy не имеет подключенной IDE"
[30035] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="detach" transaction_id="1" status="stopping" reason="ok"></response>

[30035] [Step Debug] WARN: Отладочный клиент отключен: "dbgpProxy не имеет подключенной IDE".
[30035] Лог закрыт в 2024-11-11 07:34:21.343605

[942] Лог открыт в 2024-11-11 07:34:25.171655
[942] [Config] DEBUG: Проверка, включен ли триггер 'XDEBUG_TRIGGER' для режима 'debug'
[942] [Config] INFO: Значение триггера для 'XDEBUG_TRIGGER' не найдено, возвращаемся к 'XDEBUG_SESSION'
[942] [Config] DEBUG: Значение триггера 'VSCODE' соответствует общему секрету 'VSCODE' для режима 'debug'
[942] [Step Debug] INFO: Подключение к адресу/порту: 127.0.0.1:26357.
[942] [Step Debug] INFO: Подключено к клиенту отладки: 127.0.0.1:26357 (через xdebug.client_host/xdebug.client_port). :-)
[942] [Step Debug] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///share/ZFS2_DATA/Web/dolibarr-1/htdocs/custom/evterceros/billing/api/firmarFacturas.php" language="PHP" xdebug:language_version="7.4.30" protocol_version="1.0" appid="942" idekey="VSCODE"><engine version="3.1.6"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2022 by Derick Rethans]]></copyright></init>

[942] [Step Debug] <- detach -i 1 -- "dbgpProxy не имеет подключенной IDE"
[942] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="detach" transaction_id="1" status="stopping" reason="ok"></response>

[942] [Step Debug] WARN: Отладочный клиент отключен: "dbgpProxy не имеет подключенной IDE".
[942] Лог закрыт в 2024-11-11 07:34:25.223544

Во время работы dbgpProxy я получаю следующее

2024-11-11 07:34:00.364 [info] [server] Начато новое клиентское соединение от 192.168.1.57:12102
2024-11-11 07:34:00.869 [info] [proxyinit] [VSCODE] Добавлено соединение для IDE ключа 'VSCODE': 192.168.1.57:26357
2024-11-11 07:34:00.869 [info] [server] Закрыто клиентское соединение от 192.168.1.57:12102
2024-11-11 07:34:21.342 [err ] [proxy-client] [VSCODE] IDE не подключена: dial tcp 192.168.1.57:26357: connect: время подключения истекло
2024-11-11 07:34:21.342 [warn] [proxy-client] [VSCODE] Удалена информация о соединении для 'VSCODE': dial tcp 192.168.1.57:26357: connect: время подключения истекло
2024-11-11 07:34:21.343 [warn] [server] Ошибка ответа обработчика: Ошибка чтения ответа: Ошибка чтения длины: EOF
2024-11-11 07:34:21.343 [info] [server] Закрыто серверное соединение от 127.0.0.1:48254
2024-11-11 07:34:25.172 [info] [server] Начато новое серверное соединение от 127.0.0.1:48350
2024-11-11 07:34:25.172 [info] [proxy-client] [VSCODE] Не удалось найти соединение IDE для IDE ключа 'VSCODE'
2024-11-11 07:34:25.172 [warn] [server] Ошибка ответа обработчика: Ошибка чтения ответа: Ошибка чтения длины: EOF
2024-11-11 07:34:25.172 [info] [server] Закрыто серверное соединение от 127.0.0.1:48350

Использую ли я неправильные порты? Связано ли это с файерволом? В iptables или в моем Windows Firewall ничего нет, так что если это связано с файерволом, это может быть физический файервол.

С помощью wireshark я вижу следующее:

введите описание изображения здесь

Это прокси-сервер, пытающийся подключиться к моему ПК?

Ответ или решение

Xdebug с dbgpProxy: Решение проблемы соединения

Введение

Инструмент отладки Xdebug для PHP является мощным средством, помогающим разработчикам идентифицировать и устранить ошибки в коде. Однако настройка и интеграция его с IDE (в данном случае Visual Studio Code) через прокси-сервер dbgpProxy может вызывать трудности. Этот документ рассматривает вашу конфигурацию и дает рекомендации по устранению проблем с соединением.

Проверка конфигурации

Настройки launch.json

Ваш файл launch.json выглядит правильно, но стоит обратить внимание на следующие детали:

  1. Порт и IP-адреса: Убедитесь, что вы используете правильные порты и IP-адреса. Ваш pathMappings соответствует структуре каталогов, что хорошо, но проверьте, чтобы ${workspaceRoot} был установлен корректно.

  2. Параметры прокси: Параметры прокси указаны правильно, однако проверьте:

    • IP-адрес прокси-сервера (192.168.1.88) доступен для подключения из вашей среды разработки.
    • Порт 26356 активен и не блокируется фаерволом.
Настройки 99-xdebug.ini

Файл 99-xdebug.ini также содержит правильные параметры, однако следует обратить внимание на следующие моменты:

  1. xdebug.client_host: На данный момент указаны два IP-адреса. Убедитесь, что один из них (192.168.1.57 или 127.0.0.1) соответствует вашему локальному хосту, используемому для работы с Xdebug. Рекомендуется оставить только один из этих параметров.

  2. xdebug.start_with_request: Параметр trigger требует наличия триггеров в запросах. Убедитесь, что в ваших HTTP-запросах установлен параметр XDEBUG_TRIGGER=VSCODE, чтобы инициировать отладку.

Запуск dbgpProxy

Команда для запуска dbgpProxy выглядит корректно, но сообщение о том, что файл SSL не найден (возможно, не требуется в вашем случае), можно игнорировать, если вы не планируете использовать зашифрованные соединения.

Проблемы с подключением

Ваши логи показывают, что IDE не может установить соединение с Xdebug через прокси:

WARN: Debug client detached: "dbgpProxy has no IDE connected to it".

Это может происходить по следующим причинам:

  1. Физический фаервол: Если у вас нет правил в iptables или Windows Firewall, это не исключает возможность блокировки на уровне сети (например, в роутере). Проверьте настройки роутера на наличие фильтрации по портам.

  2. Таймаут соединения: Ваша ошибка dial tcp 192.168.1.57:26357: connect: connection timed out может указывать на то, что IP-адрес или порт недоступен. Убедитесь, что служба Xdebug запущена на этом адресе и порту.

  3. Wireshark: Анализ трафика с помощью Wireshark действительно подскажет вам, пытается ли прокси-сервер установить соединение с вашим ПК. Например, если вы видите попытки соединения на порту 26357, это хороший сигнал; если нет – проблема может быть в сети или настройках фаервола.

Рекомендации по устранению неполадок

  1. Проверьте соединение: Используйте telnet или curl для тестирования подключения к порту 26357 вашего Xdebug:

    telnet 192.168.1.57 26357
  2. Удалите лишние настройки: Оставьте только один параметр xdebug.client_host, чтобы избежать путаницы. Пример:

    xdebug.client_host = 192.168.1.57
  3. Контроль сетевой активности: Используйте Wireshark для мониторинга сетевой активности и проверьте, нет ли пакетов на порту 26357, которые не доходят до вашего сервера.

  4. Обновите Xdebug и dbgpProxy: Убедитесь, что используете последнюю версию обоих инструментов для устранения потенциальных багов.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...