Eclipse PDT / PHPStorm — как настроить полноценные подсказки?
Сам спросил, сам отвечаю =)
Мучил техподдержку, но разговор похож на теннис — перебрасывание мячика с поля на поле.
Настроил отладку через 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 встрепенётся:
Принимаем сигнал и начинаем отладку.
Ну со штормом вполне штатная ситуация. Откуда ему знать какого класса там объект и объект ли вообще. Надо в аннотации указать.
Переменная должна еще и подсвечиваться в шторме если идет обращение к методам и он не знает ее класс.