Как я могу использовать XDebug с несколькими серверами? - PullRequest
1 голос
/ 21 мая 2011

В данный момент я изучаю большую кодовую базу, которая включает в себя код, развернутый на нескольких (около 9) физических серверах. Из-за общей архитектуры я не могу свернуть код на одной машине с множеством виртуальных хостов.

Я бы счел действительно полезным иметь возможность запускать один сеанс отладки в моей IDE (NetBeans или Eclipse) и достигать контрольных точек при выполнении кода на любом из моих групп серверов. Это может произойти либо путем просмотра на разных серверах, либо через вызовы RPC / HTTP в коде сервера.

Мне кажется, что для этого мне нужен какой-то прокси-сервер dbgp, который будет пересылать отладочные данные между несколькими серверами (стандартные методы прокси-сервера dbgp, которые я обнаружил в поисках, идут другим путем - несколько пользователей на одном сервере).

Есть ли способ сделать это? Я пропустил что-то очевидное (или тонкое), которое означало бы, что мне нужно больше, чем прокси dbgp?


Мне известно о Одновременной отладке 2 серверов с помощью php's Xdebug , однако решение здесь совершенно неуместно ... запуск 8 виртуальных машин (или получение 8 клиентских компьютеров) не является жизнеспособный вариант


В качестве дополнительного вопроса, если я в конечном итоге разверну свое собственное решение с открытым исходным кодом, не волнует ли людей, какой язык я использую? Java кажется хорошим для интеграции IDE, C / C ++, вероятно, имеет меньше проблем с зависимостями для любых пользователей, не являющихся Java-IDE (может быть vim / xdebug )

1 Ответ

2 голосов
/ 12 июня 2011

В то время, когда я задал вопрос, я неправильно понял, как работает протокол, и прокси-сервер не является строго необходимым.

XDebug (и DBGP протокол ) инициирует соединение отсервер обратно к клиенту на основе настроенного IP-адреса или (недавно, но не рекомендуется) IP-адрес клиента.

Это поведение можно активировать одним из двух способов:

  • Добавление ?XDEBUG_SESSION_START=<something> к URL-адресу
  • Установка файла cookie "XDEBUG_SESSION" на <something>

Хотя между браузером и клиентом может быть установлен HTTP-прокси, который вставляет одиниз них (или плагин для браузера, чтобы сделать это), для меня было более подходящим решением использовать mod_rewrite на сервере.

RewriteEngine On

RewriteCond %{HTTP_COOKIE} !XDEBUG_SESSION   [NC]
RewriteRule ^(.*)$ $1?XDEBUG_SESSION_START=mod_rewrite [QSA,L]

Поскольку mod_rewrite обычно работает для каждого виртуального хоста, это необходимо включить на каждомvirtualhost.

Кажется, что имя сеанса не имеет большого значения для NetBeans (другие IDE могут отличаться), но может стоить изменить мое значение mod_rewrite на то, что генерирует ваша IDE.Это вряд ли сработает, если используется прокси-сервер DBGP, поскольку нет простого способа связать информацию о сеансе IDE с правилом перезаписи.

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

Было бы неплохо иметь прокси-сервер DBGP, который управляет потоками с отдельных серверов с помощьюдобавление имени сервера в поле потока в пакетах инициализации , но, поскольку я еще не использовал отладчик, который поддерживает несколько потоков / серверов для PHP, это спорный вопрос.

...