netbeans показывает "Ожидание соединения (netbeans-xdebug)"

Нужна помощь для настройки xdebug, для отладки проектов из сетевых сред IDE.

Это особенности моих компонентов:

XAMPP 1.8.2

PHP: 5.4.16

NetBeans: 7.3.1.

Apache: 2.4.4 (Win32)

это последняя часть моего файла php.ini:

 [XDebug]
 zend_extension = "C:\xampp\php\ext\php_xdebug-2.2.3-5.4-vc9-nts.dll"
 ;xdebug.profiler_append = 0
 ;xdebug.profiler_enable = 1
 ;xdebug.profiler_enable_trigger = 0
 xdebug.profiler_output_dir = "C:\xampp\tmp"
 ;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
 xdebug.remote_enable = 1
 xdebug.remote_handler = "dbgp"
 xdebug.remote_host = "127.0.0.1"
 ;xdebug.trace_output_dir = "C:\xampp\tmp"

когда я запускаю phpinfo(), xdebug не устанавливается, а когда я отлаживаю проект из netbeans, он говорит "Ожидание соединения (netbeans-xdebug)".

может кто-нибудь помочь мне настроить его? будет очень признателен.

заранее спасибо.

25 ответов

Решение

Вы исправили проблему? Если нет, то, пожалуйста, попробуйте это.

1.) php.ini содержимое файла

[xDebug]
zend_extension = "c:\xampp\php\ext\php_xdebug-2.2.3-5.4-vc9.dll"
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
;xdebug.remote_host="localhost:81"
xdebug.remote_host=192.168.1.5
;xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_mode=req
xdebug.idekey="netbeans-xdebug"

xdebug.remote_host=192.168.1.5 - Это IPv4-адрес моей системы, я изменил на это, потому что я не мог отладить с localhost а также 127.0.0.1,

в IDE NetBeans откройте Tools-> Options -> PHP -> Debugging, Значения порта отладчика и идентификатора сеанса должны совпадать с портом и idekey, указанными в php.ini,

Теперь сохраните php.ini, перезапустите Apache и попробуйте отладить.

Спасибо Джонсон

Когда Netbeans запускает сеанс отладки, он запускает два прослушивателя, один на 0.0.0.0:9000 (все IPv4-IP, которые есть в системе), а другой на интерфейсе IPv6.

Если NetBeans и веб-сервер находятся в одной системе, в идеале XDebug должен быть настроен на отправку данных обратно 127.0.0.1:9000, на котором NetBeans будет прослушивать (и только за сеанс)...

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_connect_back=0

Если по какой-либо причине XDebug не может отчитаться 127.0.0.1или Netbeans не слушает 127.0.0.1вы можете настроить XDebug на отправку данных обратно $_SERVER['REMOTE_ADDR'] оригинального запроса...

xdebug.remote_connect_back=1

Таким образом, вам не нужно указывать точный IP-адрес (то есть, как указано выше, ответьте на IP-адрес локальной сети: 192.168.1.5). Недостатком является то, что любой источник может подключиться.

Если у вас есть дальнейшие проблемы, это...

xdebug.remote_autostart=1

... также запустит процесс отладки для всех запросов, а не только для тех, которые имеют правильный запрос начала сеанса или cookie. Недостатком здесь является то, что все запросы будут инициировать сбор отладочных данных и создание отчетов (делая все медленнее и генерируя больше данных).

Хотя из того, что я понял, большинство проблем "Ожидание соединения (netbeans-xdebug)" в Windows (с XAMPP, Wamp-Server и т. Д.) Обычно являются результатом брандмауэра Windows и McAfee (или другого брандмауэра и анти-брандмауэра). программное обеспечение) блокирует соединение...

Источник: выпуск Netbeans "Ожидание соединения (netbeans-xdebug)"

Я программист.Net и очень плохо знаком с PHP. Недавно я пытался разместить приложение PHP с открытым исходным кодом на моей машине (Windows). После борьбы в течение 5-6 дней я перечислю шаги, которые работали для меня.

Я удалил все предыдущие установки XAMPP и NetBeans и приступил к новым установкам.

Возможно, это решение не для всех, но оно сработало для меня, и я надеюсь, что это кому-нибудь поможет.

  1. установить XAMPP

  2. установить NetBeans для PHP.

  3. Откройте IIS и остановите его. По умолчанию он работает на порту 80.(Я запускаю XAMPP на порту 80, то есть по умолчанию, для работы на другом порту могут потребоваться дополнительные настройки конфигурации)

  4. Откройте панель управления XAMPP и запустите Apache. Если порт 80 свободен, никаких проблем возникнуть не должно.

  5. Откройте localhost в браузере, в котором должна отображаться домашняя страница XAMPP.

  6. открыть phpinfo() ссылку на левой панели и скопировать все содержимое на странице. Перейдите по адресу: http://xdebug.org/wizard.php вставьте все содержимое в TextBox и нажмите "Анализировать вывод phpinfo". Он отобразит вам файл Xdebug, подходящий для вашей конфигурации.

  7. Загрузите данную библиотеку Xdebug и скопируйте ее в C:\xampp\php\ext (Xampp является каталогом установки Xampp по умолчанию)

  8. Перейдите на панель управления XAMPP, нажмите кнопку Config перед Apache и выберите php.in,

  9. Найти строку похожую или точно как,

; zend_extension = "C: \ xampp \ php \ ext \ php_xdebug.dll"

(Точка с запятой означает, что это закомментировано)

Удалите точку с запятой и замените путь на путь dll, который вы только что скопировали:

zend_extension = "C:\xampp\php\ext\php_xdebug-2.3.2-5.4-vc9.dll"
  1. Аналогично найдите строки

    ;xdebug.remote_enable = 0;xdebug.remote_handler = "dbgp"

удалите точку с запятой перед обеими строками и сделайте remote_enable = 1

xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
  1. Перезапустите сервер Apache.

  2. Скопируйте код вашего сайта в C:/XAMPP/htdocs/(your_website)/ это означает, что ваш index.php должен быть в C:/XAMPP/htdocs/(your_website)/index.php

  3. Откройте Netbeans, выберите "Новый проект -> PHP -> проект PHP" из существующего источника и выберите только что скопированную папку в папке htdocs. Установите его для запуска на локальном веб-сервере.

  4. Установите точку останова на первой строке index.php и отладить.

Вот и все.

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

Я хочу упомянуть кое-что здесь о xdebug.remote_host

xdebug.remote_host="127.0.0.1"

Не является действительным. Это может работать в некоторых случаях, но кавычки могут также вызвать проблемы. У большинства людей нет проблем при использовании IP-адресов в кавычках, но это создает плохой прецедент. Это заставляет людей думать, что если вы хотите использовать имя хоста или URL, вы должны поместить его в кавычки. Это неверно, URL в кавычках не будут работать.

Если вы хотите выполнить отладку с помощью URL-адреса, вы можете сделать это, просто поместив URL-адрес после равенства следующим образом:

xdebug.remote_host=subdomain.mydomain.com

Я также хочу отметить, что если у вас есть номер порта, не добавляйте его. Это не работает:

xdebug.remote_host=subdomain.mydomain.com:9000

Это то, что вы хотите сделать:

xdebug.remote_host=subdomain.mydomain.com
xdebug.remote_port=9000

Если вы сделаете это, я также предупреждаю, что вы убедитесь, что remote_connect_back отключен. Как это:

xdebug.remote_connect_back=0

или вы можете опустить его полностью, например так:

;xdebug.remote_connect_back=1

Если параметр remote_connect_back включен, он попытается извлечь ваш IP-адрес из входящего соединения и проигнорирует параметр remote_host и port.

Xdebug использует простой старый TCP для установления соединений. Это не HTTP. Это означает, что такие инструменты, как Fiddler, не будут показывать какие-либо пакеты или информацию об отладке. Если вам нужно отладить и посмотреть, выполняет ли сервер вызов вашей IDE, есть несколько способов проверки.

Wireshark позволит вам видеть трафик TCP. Также, если вы работаете в Windows, Microsoft Message Analyzer также может отслеживать TCP.

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

Это отличная бесплатная Java-программа для запуска TCP-сервера: http://sockettest.sourceforge.net/

Как запустить TCP-сервер

В разделе IP-адрес просто укажите 127.0.0.1 или оставьте значение 0.0.0.0. Затем укажите номер порта, который по умолчанию обычно равен 9000 для xdebug.

После запуска TCP-сервера откройте свою удаленную веб-страницу с помощью xdebug_break(); вызов функции в нем. Это скажет xdebug на удаленном сервере, чтобы начать отладку на любом сервере и порту, который вы указали в своем php.ini.

Посмотрите сервер сокетов и посмотрите, есть ли у вас соединение. Первые отправленные данные должны выглядеть примерно так:

<init appid="APPID"
      idekey="IDE_KEY"
      session="DBGP_COOKIE"
      thread="THREAD_ID"
      parent="PARENT_APPID"
      language="LANGUAGE_NAME"
      protocol_version="1.0"
      fileuri="file://path/to/file">

Если вы сделали это далеко, удаленная отладка работает! Просто остановите сервер и настройте IDE для прослушивания на этом порту!


Если вы похожи на большинство из нас, ваш компьютер разработчика находится за маршрутизатором с NAT. Это означает, что у всех в вашем офисе одинаковый публичный IP-адрес. Это проблема, потому что когда xdebug связывается с этим IP-адресом, чтобы начать отладку, он попадает на маршрутизатор, а не на ваш компьютер. Маршрутизатор может быть настроен на передачу определенных номеров портов отдельным компьютерам, но вы можете этого не делать, так как этот порт будет открыт, пока вы не измените настройки маршрутизатора обратно.

Другой вариант - использовать SSH. Вот хороший пример того, как это сделать: http://stuporglue.org/setting-up-xdebug-with-netbeans-on-windows-with-a-remote-apache-server/

Мой предпочтительный вариант - использовать Ngrok. Ngrok - отличный инструмент для перенаправления трафика http, https и TCP. Чтобы использовать функцию перенаправления TCP, вам нужно зарегистрироваться для бесплатной учетной записи.

После того как вы зарегистрировали учетную запись и добавили свой ключ API на свой компьютер, выполните эту команду на компьютере, на котором установлена ​​ваша IDE:

ngrok tcp 9000

Это откроет туннель tcp (не http) от сервера ngrok к любой машине, на которой вы запускали команду. Я использую порт 9000, вы можете изменить этот порт, если ваша IDE настроена для другого порта Xdebug.

Вот что вы должны увидеть:

Туннель Ngrok TCP открыт

Вам нужно будет посмотреть, что такое URL для открытого туннеля TCP. В этом примере это:

0.tcp.ngrok.io:14904

Для этого сеанса настройка Xdebug на вашем сервере должна быть такой:

xdebug.remote_host=0.tcp.ngrok.io
xdebug.remote_port=14904

URL и порт будут меняться каждый раз при запуске ngrok. Если вы хотите иметь одинаковые URL и порт, вам нужно перейти на платную учетную запись. Обязательно перезапустите apache после внесения изменений в ваш php.ini.

Я просто часами читал так много ответов на этой странице и другие, как это, и никто не упомянул, что оказалось решением для меня:

Убедитесь, что выбранные параметры порта совпадают во всех трех местах

Моя проблема заключалась в том, что есть ТРИ места, которым должен соответствовать выбранный порт. Двое из моих сказали 9001, а один сказал 9000. Я изменил их все на 9000.

Это была проблема, и поэтому Netbeans говорил только "Ожидание соединения (netbeans-xdebug)".

3 настройки порта:

  • php.ini (xdebug.remote_port=9000)
  • свойства проекта> Запустить конфигурацию> Дополнительно
  • Netbeans > Инструменты> Параметры> PHP > Отладка

Проверьте также настройки брандмауэра "windows".

Для меня это не сработало, потому что моя сеть LAN была объявлена ​​как "Публичная сеть". После того, как я переключил его на "Рабочая сеть", он работал нормально.

Попробуйте этот параметр, если у вас последняя версия Xdebug, синтаксис старой версии был изменен

https://xdebug.org/docs/upgrade_guide

      xdebug.mode=debug
xdebug.start_with_request = Yes
    ;xdebug.mode=profile
    ;xdebug.start_with_request=trigger
    xdebug.client_host = "localhost"
    xdebug.client_port = 9003
    xdebug.remote_handler = "dbgp"
    xdebug.log = "C:\xampp\tmp\xdebug\xdebug.log"
    xdebug.trace_output_dir = "C:\xampp\tmp"

Я нахожусь на Windows с xampp и изменил раздел [XDebug] моего php.ini (внизу), чтобы он работал:

zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

Получено из вики Netbeans здесь: http://wiki.netbeans.org/HowToConfigureXDebug

Если у вас работает Apache, не забудьте перезапустить его после настройки XDebug и сохранения php.ini.

В моем случае в журнале Apache было показано предупреждение PHP о том, что дата и время не установлены. Xdebug/netbeans начал работать, как только я установил его в php.ini и перезапустил apache.

date.timezone = America/Los_Angeles

Это PHP 5.5.

Добавление этого сработало для меня:

xdebug.idekey=netbeans-xdebug   

Правильно настроив файл php.ini, netbeans, переадресацию портов на маршрутизаторе, я все еще получал жалкое "ожидание соединения" (netbeans-xdebug). В конце концов я заметил на странице netbeans "Не забудьте установить output_buffering = Off в вашем файле php.ini ".

Итак, я проверил файл /etc/php/7.x/apache2/php.ini и, конечно же, его значение было 4096. Поэтому я сбросил output_buffering = Off и вот оно работает!!!

Надеюсь, что это кому-то поможет, поскольку из сообщения следует, что это ошибка соединения, а не ошибка конфигурации.

В моем случае, если я добавлю следующее в php ini, это не сработало

zend_extension_ts="C:\PHP\PHP560\ вн \php_xdebug-2.4.0rc4-5.6-vc11.dll"

Но если я добавлю

zend_extension="C:\PHP\PHP560\ вн \php_xdebug-2.4.0rc4-5.6-vc11.dll"

Работает нормально.

В моем случае помогла смена браузера в моем PHP-проекте. Это был «Chrome с соединителем Netbeans». Когда я изменил это на «Chrome», отладка заработала как надо.

Также подумайте, подходит ли для вашего случая версия xdebug NTS или TS. Проверьте журнал Apache на предмет подсказок

У меня такая же проблема. Зачем? Сначала я установил WAMP, спасибо Netbeans, и они вместе работают как шарм. Позже я установил XAMPP, и сайты Localhost работали без сбоев, но NetBeans никогда не мог подключиться к XAMPP (netbeans-xdebug). В то же время NetBeans хорошо работал с Wamp.

Моим решением было вернуться в Wamp. Это лучше, чем ничего.

Мой ПК: Win-7-32, NetBeans-8.0.2,

wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b

XAMPP-win32-5.6.8-0-VC11

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

Поэтому я просто удалил подкаталог nbproject, содержащий настройки проекта, и создал новый проект с существующим исходным кодом. Это решило проблему для меня.

Я потратил много времени, пытаясь настроить оптимальную настройку, и это заслуживает отдельного ответа, хотя @Johnson T A и так почти правильный.

Он говорит

xdebug.remote_host=192.168.1.5 - это IPv4-адрес моей системы, я изменил его, потому что не смог отладить с localhost и 127.0.0.1.

Ну, не каждый может использовать личный адрес, или это может быть динамический, или другие вещи. Кроме того, в моем случае я страдал от очень долгого времени ожидания перед началом отладки - примерно 30 с каждый раз. Это было непрактично.

Я уверен, что все, кто имеет эти проблемы, по крайней мере, на Windows 7 или около того. Проблема связана с сочетанием разрешения имен и xdebug. Чтобы преодолеть их, убедитесь, что:

  • Порт 9000 не используется. Если это так, измените его на неиспользуемый, как в php.ini, так и в netbeans.
  • Удостоверься что xdebug.remote_enableявляется on,
  • Если вы хотите иметь возможность отладки с использованием обоих localhost а также 127.0.0.1 адреса, открытые \Windows\System32\drivers\etc и убедитесь, что у вас есть следующие строки:

    127.0.0.1 localhost

    :: 1 localhost

Убедитесь, что в первой строке нет знака #, а во второй -.

Мой рабочий раздел php.ini (мне не нужен профилировщик, поэтому я его отключил):

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.remote_enable = on
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
xdebug.remote_port = 9001
xdebug.trace_output_dir = "C:\xampp\tmp"
xdebug.remote_log = "C:\xampp\tmp\xdebug\xdebug.log"
xdebug.idekey = "netbeans-xdebug"
xdebug.remote_autostart = on
xdebug.remote_connect_back = on

Остановите отладчик netbeans. Перезапустите Apache.

Могу поспорить, что вы больше не будете страдать от долгого ожидания и странного поведения отладчика.

Объяснение: Хотя в etc/hosts написано, что "разрешение имен локальных хостов обрабатывается внутри самого DNS", по любой причине это не работает с xdebug, если вы не указали это явно в этом файле. Явное выражение в целом не причиняет вреда и решает эту проблему с помощью xdebug. Но также вам нужно явно отключить короткую запись sIPv6 для localhost (::1), чтобы все это работало. Не знаю внутренних причин, но разберись со всеми комбинациями, и это работает для меня как шарм.

У меня была такая же проблема, и я пытался ее решить часами. Я наконец узнал, что расширение Chrome ipflood причина в том, что изменяет заголовки, чтобы выглядело так, как будто вы используете прокси.

Он отлично работает после того, как я отключил его!

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

Пакет xdebug в CentOS называется "phpXXu-pecl-xdebug".

Значения по умолчанию в большинстве последних Xdebugs обычно в порядке. Только строго необходимо получить правильные эти два значения где-нибудь в файле Apache .ini:

xdebug.remote_enable=on
xdebug.remote_host=[DNS entry that resolves to the IP4 of your debugger]

Для пользователей Ubuntu:

  1. судо су
  2. apt-get установить php5-dev php-pear
  3. pecl установить xdebug
  4. find / -name 'xdebug.so' 2> / dev / null
  5. он вернет что-то вроде: /usr/lib/php5/20121212/xdebug.so
  6. vi /etc/php5/apache2/php.ini
  7. добавьте эту строку: zend_extension="/usr/lib/php5/20121212/xdebug.so"
  8. перезапуск службы apache2
  9. перезапустите IDE

Выберите конкретный браузер для отладки:

  1. Щелкните правой кнопкой мыши на проекте -> выберите Свойства
  2. Выберите категории: Браузер, затем выберите определенный браузер для отладки.

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


Другой способ - открыть новое окно:

попробуйте зайти в проект> запустить конфигурацию> продвижение

и переключиться на значение по умолчанию, проверьте, открывается ли в браузере другое окно

Попытка может быть для начала php -i в командном окне. При перенаправлении вывода ошибка была

Для меня это было окончательное решение, потому что у меня была загружена неправильная версия Xdebug

Для меня это должно было быть: php_xdebug-2.1.2-5.3-vc6.dll

Но у меня было: php_xdebug-2.2.4-5.3-vc9.dll, Так произошла ошибка из php -i

E:\Programme\php>php -i > myOutputFromPhp

приводит к ОШИБКЕ

Не удается загрузить Xdebug - он был собран с конфигурацией API220090626,TS,VC9, в то время как работающий движок - API220090626,TS,VC6

Для пользователей Windows это то, что сработало для меня:

  1. Получите вывод phpinfo() и скопируйте его сюда: https://xdebug.org/wizard

  2. Он скажет вам, какую именно dll вам нужно скачать.

  3. Скопируйте эту dll в C:\xampp\php\ext и переименуйте ее в php_xdebug.dll.

  4. Обратите внимание на версию xdebug, которую вы установили. Это было ключевым для меня! Моя версия xdebug была версии 3, поэтому мне пришлось...

  5. Обновите файл php.ini, чтобы он содержал следующее (для xdebug v3):

    [XDebug]
    zend_extension = xdebug
    xdebug.mode=debug
    xdebug.client_host=localhost
    xdebug.client_port=9000
    xdebug.idekey="netbeans-xdebug"

  6. Перезапустите веб-сервер Apache и Netbeans.

Если ваш xdebug не работает правильно, проверьте журнал вашего сервера:

$ sudo less /var/log/httpd/error_log

Чтобы проверить соединения, используйте эту команду:

$ sudo netstat -an

После запуска отладки в netbeans, если вы используете команду netstat, вы можете увидеть порт xdebug (вероятно, это 80):

tcp6       0      0 192.168.33.10:80       192.168.33.2:49901      ESTABLISHED

Порт netbeans составляет 9000:

tcp        0      0 192.168.33.10:52024    192.168.33.2:9000       ESTABLISHED

Вы можете изменить порт xdebug отсюда (в верхнем меню Сервис -> Параметры -> PHP):

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

Другие вопросы по тегам