Запустить 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 видит внешние запросы вообще.

перейти к свойствам проекта > выполнить конфигурацию > расширенный > 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.