Сам спросил, сам отвечаю =)
Мучил техподдержку, но разговор похож на теннис — перебрасывание мячика с поля на поле.
Настроил отладку через
xdebug и в вотчере всё увидел.
Вот как это выглядит в дебагере:
================ Удалённый дебаггинг (remote debug, xdebug) ================
Инструкция (для тех, кто попадёт сюда с поиска).
Что нужно для настройки дебаггинга удалённо (потому что, блин, пришлось поковыряться).
Ниже даны секции по PHPStorm и Eclipse PDT.Дано:
Компьютер №1:
Windows + PhpStorm.
Компьютер №2:
Debian + Апач удалённо.
Задача: организовать синхронный дебаггинг между компьютерами.
Важно: шторм будет идти по шагам по вашему файлу, а "
слушать" отчёт xdebug, который транслирует, идя по файлам на удалённом сервере.
Поэтому файл, открытый в шторме, должен быть точной копией того, что выполняется на сервере.
Шаги:
1. На сервере устанавливаем xdebug, настраиваем php.ini
В нём я переменную
xdebug.remote_enable отключил, потому что на шторм начинают сыпаться запросы со всех сайтов на сервере =)
Эту переменную инициализировал через
.htaccess именно в той директории, откуда провожу отладку:
php_flag xdebug.remote_enable on
(!)
в рамках всего сайта:
Чтобы работало так: для обычных пользователей дебаггинг отключен, а для вас стартует — в htaccess прописываем:
<If "%{REMOTE_ADDR} == '137.126.15.14'">
php_flag xdebug.remote_enable on
</If>
... где
137.126.15.14 — ваш IP адрес (аналог php-переменной
$_SERVER[ 'REMOTE_ADDR' ])
Можно htaccess настроить
более тонко, чтобы админка не прерывалась в дебаг (или наоборот).
Пример конфига (
REQUEST_URI не захотело использовать, хз почему — в
phpinfo() они определены):
<If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
php_flag xdebug.remote_enable on
php_flag xdebug.remote_autostart on
</If>
Если на сервере / на сайте работают
разные программисты, можно разделение дебаг-потоков сделать через трансляцию на разные порты в зависимости от пользователя (IP-адреса клиента):
<If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
php_flag xdebug.remote_enable on
php_flag xdebug.remote_autostart on
php_value xdebug.remote_port 9013
</If>
... соответственно, ориентируясь на IP и запрошенный урл, дебаггер транслирует информацию на определённый порт. Программисту остаётся правильно установить туннель. 2. Пробрасываем
SSH-туннель.
Задача: сделать так, чтобы
на порт 9007 компьютера №1 поступала информация, которая транслируется на порт 9002 компьютера №2.
Исходя из формулировки, благодаря этому способу можно пробросить туннель, если порты отличаются.
Например, вам достался сервер, на который у вас есть SSH-доступ, но нет возможности менять порт xdebug. Или локально порт занят и вам нужно какой-то нестандартный.
То есть реально пробросить например туннель, который на порт 9007 компьютера №1 будет транслировать информацию с порта 9002 компьютера №2. Сервер пушит инфу на 9002, а вы на локальном компьютере слушаете порт 9007 .
Сделал это через
putty:
...как проверить?
================ PHPStorm ================
3. На компьютере ставим слушать порт 9007 (в моём случае):
Меню File / Settings / Languages & Frameworks / PHP / Debug + кнопочка "Start Listening for PHP Debug Connections"
+
UPD: прослушка порта (вкл/выкл).
Вот скриншот, которого очень не хватает во всех раскопаных туториалах:
Результат: когда шторм слушает порт и мы в обычном браузере открываем страницу, которая находится в разделе, пинаюшем
xdebug.remote_enable, шторм перехватывает сигнал и ведёт его уже через свой дебаггер.
Нужно только не забыть либо поставить breakpoint, либо опцию Break at first line in PHP script, иначе скрипт просто пролетит и даже не заметишь =)
По поводу соответствия / несоответствия файлов локально и удалённо: если шторм замечает, что не может сопоставить файлы, он выдаст предупреждение и предложит настроить маппинг:
================ ECLIPSE PDT ================
Настройка под Eclipse PDT.
Шаги на сервере и туннеля остаются те же.
Переходим в
Windows / Preferences / PHP / Servers.
Там создаём новый сервер:
Заходим в него снова и донастраиваем появившиеся вкладки:
Ставим созданный сервер по-умолчанию:
Поставим ещё, чтобы дебаггер break-нулся с первой же строчки (потом можно отключить и использовать breakpoints):
Когда убедимся, что всё работает, — рекомендуется проводить то же, но индивидуально для конкретного проекта: через
Property проекта, либо через
Debug Configuration:
Всё.
Теперь, когда на порт 9007 поступит сигнал, Eclipse встрепенётся:
Принимаем сигнал и начинаем отладку.