Точки останова в двух приложениях, использующих одну и ту же кодовую базу с помощью 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 ответа:
два варианта. Если первое (проще) не сработает, то второе наверняка сработает.
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 запроса.