Запустить 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