Xdebug + phpStorm как отлаживать ajax запросы?

Petja

Новичок
Тестовый файл запускается в броузере? Если в броузере, то нет никакой разницы ajax или нет.

Это как раз просто. При нажатой кнопке "Listen ..." шторм услышит, что xDebug просит кого-то отреагировать.
Я нажал листен, установил точку останова, открыл в браузере скрипт.

Ну он открылся без остановок. И ничего не произошло. А дальше что?
Что должно произойти когда я в браузере открыл(запустил) этот скрипт?
 

ksnk

прохожий
Каким образом проверялся тестовый файл? Кнопкой "отладить" в шторме? При этом запускается собственный, штормовой серверок и он отлаживает все сам. Тот серверок никакого отношения не имеет к xDebug на сервере.
 

ksnk

прохожий
Блин, ну конечно установлен, я не совсем идиот.
Конечно выполнится, я тестовый файл сделал.
Если включаю дебаг в PhpStorm - все дебажится.
Я вот про это, если что
 

Petja

Новичок
Каким образом проверялся тестовый файл? Кнопкой "отладить" в шторме? При этом запускается собственный, штормовой серверок и он отлаживает все сам. Тот серверок никакого отношения не имеет к xDebug на сервере.
Я запускаю скрипт в браузере. Если все нормально установлено и работает - дальше что должно произойти?
 

ksnk

прохожий
Если все нормально установлено и работает - дальше что должно произойти?
То дальше все должно остановится. Тонкость в том, что для сервера не НИКАКОЙ разницы, ajax запрос идет или обычное обновление страницы.

Если на скрипте не останавливается, значит что-то неправильно настроено. Возвращаемся к моим ответам, запускаем phpinfo и смотрим секцию xDebug. Вот некоторые мои параметры оттуда.
Version 2.1.3
xdebug.remote_enable On On
xdebug.remote_handler dbgp dbgp
xdebug.remote_port 9000 9000
 

Petja

Новичок
То дальше все должно остановится. Тонкость в том, что для сервера не НИКАКОЙ разницы, ajax запрос идет или обычное обновление страницы.

Если на скрипте не останавливается, значит что-то неправильно настроено. Возвращаемся к моим ответам, запускаем phpinfo и смотрим секцию xDebug. Вот некоторые мои параметры оттуда.
То есть если все правильно настроено, я ставлю в phpstorm точку останова, открываю этот скрипт в браузере, и в браузере же - скрипт останавлявается именно там, где я поставил точку останова в phpstorm ?
 

Petja

Новичок
Я же не спрашивал как настроить, я спрашиваю как работает.
 

radioheaded

PHP нуб
Я же не спрашивал как настроить, я спрашиваю как работает.
Насколько я понял из тредика, вы пытаетесь нас убедить, что нормально умеете пользоваться xdebug'ом, но проблема только в ajax-запросах. Так вот у меня встречный вопрос: а чем, собственно, с точки зрения xdebug ajax-запрос отличается от любого другого? Да ладно, не напрягайтесь, я отвечу: в целом ничем.

PhpStorm подключается к xdebug на сервере, отсылает проставленные брейкпойнты, в браузере вы выставляете либо куку, либо GET-параметр (ну это вы все должны знать), браузер отсылает запрос на сервер (при этом неважно, синхронный это запрос или асинхронный), код выполняется через xdebug-обвязку и контролируется ею, xdebug останавливает выполнение, если попадается брейкпойнт и сообщает об этом в IDE, IDE любезно подсвечивает вам пойманную точку и может получать от xdebug контекст выполнения в данный момент.

Единственное, где может быть загвоздка, это если у вас локально лежит копия кода, на которой вы отлаживаете (и которую синкаете на сервер), а сам код выполняется удаленно. Тогда, возможно, нужно настроить маппинг локального дерева директорий на удаленное.
 

Petja

Новичок
Насколько я понял из тредика, вы пытаетесь нас убедить, что нормально умеете пользоваться xdebug'ом, но проблема только в ajax-запросах. Так вот у меня встречный вопрос: а чем, собственно, с точки зрения xdebug ajax-запрос отличается от любого другого? Да ладно, не напрягайтесь, я отвечу: в целом ничем.
Мне незачем кого-то убеждать, я задал вопрос. Я вообще впервые установил xdebug и пытаюсь понять как он должен работать.

PhpStorm подключается к xdebug на сервере, отсылает проставленные брейкпойнты, в браузере вы выставляете либо куку, либо GET-параметр (ну это вы все должны знать),
А не подскажите подробнее на этом месте или где почитать?
браузер отсылает запрос на сервер (при этом неважно, синхронный это запрос или асинхронный), код выполняется через xdebug-обвязку и контролируется ею, xdebug останавливает выполнение,
Останавливает выполнение на сервере? Или в браузер все выполняется, но в phpStorm сообщается? Если в phpStorm сообщается - то это каждый раз при загрузке страницы кем угодно?
Или в браузер что успело прийти то пришло и остановилось? То есть при отладке - если был рабочий сайт - то он становится нерабочий? Или как?
если попадается брейкпойнт и сообщает об этом в IDE, IDE любезно подсвечивает вам пойманную точку и может получать от xdebug контекст выполнения в данный момент.
Единственное, где может быть загвоздка, это если у вас локально лежит копия кода, на которой вы отлаживаете (и которую синкаете на сервер), а сам код выполняется удаленно. Тогда, возможно, нужно настроить маппинг локального дерева директорий на удаленное.
Премного благодарен за помощь!!!
 

radioheaded

PHP нуб
Я уже чувствую ваш обидчивый тон в классическом стиле новичков «да я все знаю, не надо меня учить, просто ответьте на вопрос», но все же, без обид, прочитайте сначала хотя бы http://phpfaq.ru/na_tanke .

Я вообще впервые установил xdebug и пытаюсь понять как он должен работать.
Вот с этого и нужно было начать ваш вопрос.

А не подскажите подробнее на этом месте или где почитать?
Ну вот я, например, нашел в гугле по запросу «xdebug phpstorm» — https://www.jetbrains.com/phpstorm/webhelp/configuring-xdebug.html#d10598e514

Останавливает выполнение на сервере? Или в браузер все выполняется, но в phpStorm сообщается? Или в браузер что успело прийти то пришло и остановилось?
Вот тут вы опять будете обижаться, но вы, по всей видимости, совсем не понимаете, как вообще происходит взаимодействие между браузером и сервером (причем не обязательно при работе с PHP-скриптами, а вообще).

То есть при отладке - если был рабочий сайт - то он становится нерабочий? Или как?
Я не знаю, что вы подразумеваете под рабочим сайтом. В любом случае, на продакшене никто в здравом уме xdebug не ставит, это исключительно для отладки в девел-окружении (или staging-окружении). xdebug работает с сессионными ключами (как вы уже знаете из указанной мною выше ссылки). То есть, вы устанавливаете ключ сессии в IDE и затем xdebug начинает работать с запросами, в которых передается тот же самый ключ сессии (соответственно, в случае с отладкой сайта ключи посылает браузер).

Вот есть расширение для Хрома, с помощью которого удобно переключать режимы отладки xdebug — https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc (их, наверное, много, но я пользуюсь этим).

ps: для тестирования RESTful приложений рекомендую Postman, ибо пока встроенный REST клиент в сторме ужасен.
 

Petja

Новичок
radioheaded благодарю! Пошел изучать.
Но как работает php и веб сервер и tcp-ip я вроде знаю.
А вот с xdebug впервые столкнулся.
 

Petja

Новичок
xdebug я настроил на сервере (вообще-то сейчас используется денвер а у него оказалось по дефолту он стоит).
В phpstorm я тоже настроил, как было по ссылке - я ее уже читал.

А вот механизмы отладки я пока не понимаю.
и затем xdebug начинает работать с запросами, в которых передается тот же самый ключ сессии
Что за сессия, я видимо пропустил. И как мне ее в браузер подсунуть, через firebug?
 

Petja

Новичок
Все, установил плагин на фаерфокс, по типу такого:

Вот есть расширение для Хрома, с помощью которого удобно переключать режимы отладки xdebug — https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc (их, наверное, много, но я пользуюсь этим).
И все пошло. Точнее все стало взаимодействовать. Как именно буду разбираться.
Точно, если сессия указано то страница в браузере начинает взаимодействовать с phpstorm
 

Petja

Новичок
Все! Заработало!
Не донастроил я xdebug, благодарю всех за помощь!
Вопрос закрыт! Ураааааа!!!!
 
Сверху