Запустить XDebug в Netbeans по внешнему запросу

Я использую Netbeans 6.7 и XDebug для отладки PHP-сайта на моей машине, запуская запрос из Netbeans (Project- > Debug). Это прекрасно работает и очень полезно.

Мой вопрос: возможно ли прикрепить отладчик к любому запросу, который входит, а не к тем, которые я запускаю из Netbeans?

то есть вместо нажатия "Отладка" поставьте Netbeans в режим запуска отладчика и присоедините к следующему запросу, который входит.

У меня такое чувство, что это может быть глупый вопрос, но если это возможно, это будет здорово.

Изменить: Немного больше информации

Моя система (Ubuntu 9.04) настроена следующим образом:

Содержание /etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20060613/xdebug.so

xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug

Параметры отладки Netbeans PHP по умолчанию:

Debugger Port: 9000
Session ID: netbeans-xdebug
Stop at the First Line: ticked

Мой /etc/hosts перенаправляет файлы www.mywebsite.com на localhost

Если я нажимаю кнопку отладки в Netbeans, то Firefox запускается с адресом http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, и отладчик работает как ожидалось.

Но если я просто перейду к http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, это не приведет к отладчику в Netbeans.

Я также попытался установить xdebug.remote_host=www.mywebsite.com, но это не имеет никакого значения.

Кроме того, я включил xdebug.remote_log и показывал информацию, когда я начинаю с netbeans, но ничего для внешних запросов. Поэтому я не думаю, что XDebug вообще видит внешние запросы.

Ответ 1

перейти к свойствам проектa > выполнить конфигурацию > расширенный > отладочный url и проверить, не открывать веб-браузер (*). не устанавливайте хост под прокси-сервером отладчика. сохраните эти настройки. в окне проекта в вашем проекте: щелкните правой кнопкой мыши > debug (это начинает прослушивать отладочные подключения). браузер не запускается. введите http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug в свой браузер. он должен сломаться в netbeans. по крайней мере, то, что происходит здесь:)

(*) вам также может потребоваться установить отображение пути - для меня это работает без

Ответ 2

По умолчанию xdebug не будет пытаться подключиться к удаленному хосту, если не указан параметр "Cookie/URL" XDEBUG_SESSION_START. Вы можете включить xdebug для "всегда включен", установив xdebug.remote_autostart в 1 в php.ini.

Кроме того, для этого вам нужно будет запустить отладчик PHP в NetBeans. Я еще не нашел лучшего решения, но вы можете заставить отладчик PHP прослушивать входящие соединения, начав отладку случайного файла (используйте CTRL + SHIFT + F5, чтобы начать отладку файла), а затем продолжить (нажав F5) один раз он остановился в точке останова. Отладчик Netbeans должен работать до тех пор, пока вы его не прекратите.

Обновление: из-за проверки NetBeans идентификатора сеанса (XDEBUG_SESSION_START) вы также должны установить переменную idekey. например:

xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"

Ответ 3

У меня была аналогичная проблема (на NetBeans, Mac OSX) после обновления PHP и компиляции/установки xdebug. phpinfo показала xdebug как загруженную, но она все равно не будет подключаться, и после того, как все перечисленное выше, все равно не имеет успеха. Затем я попробовал уменьшить количество параметров, установленных в моем файле PHP.ini, до минимально необходимого. Мне казалось, что это проблема.

; REMOVED (commented) the following
; xdebug.remote_log=/myfile.log
;xdebug.extended_info = off
;xdebug.auto_trace=1
;xdebug.trace_output_dir=/mydir/myphptracefile.txt
;xdebug.trace_output_name=php_trace.%c
;xdebug.collect_params=4

Я также переименовал по умолчанию xdebug.idekey из netbeans-xdebug в значение по умолчанию, а затем снова.

После перезапуска Apache xdebug снова начал работать: я не уверен, что именно его исправил, но хорошей отправной точкой может быть только начало с минимального количества настроек xdebug в вашем файле php.ini, затем медленно добавьте больше если они вам понадобятся. Я подозреваю, что это, возможно, имело какое-то отношение к настройкам трассировки, но не может быть уверенным.

Основные настройки, которые я использовал, были:

xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug

Также неплохо скомпилировать debugclient (в исходном пакете xdebug) и проверить отладку в командной строке, так как это скажет вам, может ли xdebug работать как минимум независимо от вашей среды IDE.

Ответ 4

Не уверен в Netbeans, но любая другая IDE, которую я использовал, всегда слушает отладочное соединение. Вы можете запустить новый отладочный сеанс из xdebug, добавив строку запроса ?XDEBUG_SESSION_START=name в url. Если Netbeans прослушивает, это должно начинаться с нового сеанса отладки.

Подробнее см. http://xdebug.org/docs/remote#browser_session