Точки на прекъсване в две приложения, споделящи една и съща кодова база, използвайки Xdebug

Настроих Xdebug на локален екземпляр на Vagrant, работещ с 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.

Използвам Sublime Text 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"

Това поправимо ли е? Всички отговори/коментари се оценяват!


person Kevin Sjöberg    schedule 03.06.2014    source източник


Отговори (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');
person user3751385    schedule 19.06.2014

Използвайте conditional breakpoints. Можете да ги накарате да зависят от всеки PHP код. напр. задайте константа за всяка входна точка и я проверете. Или проверете URL адреса на заявката.

person pgampe    schedule 06.06.2014