Точки останова в двух приложениях, использующих одну и ту же кодовую базу с помощью Xdebug


Я настроил Xdebug на локальном бродячем экземпляре под управлением Ubuntu. Он работает, как и ожидалось, и я могу настроить точки останова в своем приложении.

У меня есть сценарий, в котором приложение делает запрос к внутреннему API. Внутренний API находится на том же сервере и той же кодовой базе.

Иллюстрация дерева

codebase/
  app/
    root
  api/
    root

Приложение доступно как https://local.myapplication.com и API доступен локально как http://local.api.myapplication.com).

Если я теперь установлю точку останова в некотором коде для API, а затем посещу https://local.myapplication.com/some/action/that/triggers/the/api/code точка останова срабатывает только в том случае, если я не инициализирую сеанс Xdebug для первого приложения, т. е. не задаю параметр запроса XDEBUG_SESSION_START. Если он установлен, моя точка останова игнорируется.

В этом есть определенный недостаток. Если у меня есть точка останова в приложении и API, я в данный момент я не могу вызвать ни то, ни другое. Либо я могу вызвать точки останова приложения, либо точки останова API.

Я использую возвышенное текст 3 с плагином https://github.com/martomo/SublimeTextXdebug. Мои параметры отладчика xdebug в php.ini представлены:

zend_extension="/usr/lib/php5/20090626/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=192.168.3.1
xdebug.remote_port=9000
xdebug.remote_log="/tmp/php5-xdebug.log"

Можно ли это исправить? Любые ответы/комментарии приветствуются!

2 8

2 ответа:

два варианта. Если первое (проще) не сработает, то второе наверняка сработает.

1-Запуск нового сеанса Xdebug для каждого http-запроса.

В php.ini, добавьте в настройки xdebug следующее:

xdebug.remote_autostart = 1

Смотрите документацию здесь

2-запуск двух сеансов Xdebug одновременно.

Вам потребуется иметь два отдельных экземпляра вашего IDE / текстового редактора, слушающих xdebug - каждый на другом порту. Вы можете настроить оба экземпляра для редактирования одного и того же проект в то время как их служба xdebug слушает на разных портах.

Например:

  • ваше "приложение" - > порт 9000
  • ваш "внутренний API" - > порт 9001

Чтобы заставить ваш" внутренний API "запустить xdebug на порту 9001, вы можете просто сделать следующее В начале вашего скрипта "внутренний API":

ini_set('xdebug.remote_port', '9001');

Использование conditional breakpoints. Вы можете сделать их зависимыми от любого кода PHP. Например, установите константу для каждой точки входа и проверьте ее. Или проверьте URL запроса.