Я использую 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 видит внешние запросы вообще.
перейти к свойствам проекта > выполнить конфигурацию > расширенный > debug url и проверить , не открывать веб-браузер (*). не устанавливайте хост под прокси-сервером отладчика . сохраните эти настройки. в окне проекта в вашем проекте: щелкните правой кнопкой мыши > debug (это начинает прослушивать отладочные подключения). браузер не запускается. введите http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
в своем браузере. он должен сломаться в netbeans. по крайней мере, вот что происходит здесь 🙂
(*) вам также может потребоваться установить отображение пути – для меня это работает без
По умолчанию 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"
У меня была аналогичная проблема (на 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 работать как минимум независимо от вашей среды разработки.
Не уверен в Netbeans, но любая другая IDE, которую я использовал, всегда слушает отладочное соединение. Вы можете запустить новый отладочный сеанс из xdebug, добавив строку запроса ?XDEBUG_SESSION_START=name
для URL- ?XDEBUG_SESSION_START=name
. Если Netbeans прослушивает, это должно начать новый сеанс отладки.
Подробнее см. http://xdebug.org/docs/remote#browser_session.