Отладка подключения порта IDE к XDebug: «Ожидание подключения»

преамбула

Как и многие, я потратил больше времени на отладку подключения IDE к XDebug, чем с помощью XDebug для отладки моих программ. Я заставил его работать многократно , но каждый раз я получаю общую проблему «Ожидание подключения» . Я не смог локализовать причину, по которой XDebug работает или терпит неудачу. Я использую ubuntu в течение двух лет; Я не ни ноб, ни гуру страйк. Что я делаю не так? Как лучше отладить подключение IDE к XDebug?


Настроить

  • Ubuntu 10.10
  • Netbeans 6.9.1
  • PHP 5.3.3-1ubuntu9 с Suhosin-Patch
  • Xdebug v2.1.0 с debugclient, созданным 20 сентября 2010 г. из исходного кода, с использованием специально разработанного сценария инструкций по установке на xdebug.org
  • Apache Apache / 2.2.16
  • Оба файла /etc/php5/apache2/php.ini и /etc/php5/cli/php.ini имеют:
    •  zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so
       xdebug.remote_enable = 1
       xdebug.remote_handler = DBGp
       xdebug.remote_mode = REQ
       xdebug.remote_host = 127.0.0.1
       xdebug.remote_port = 9000
       xdebug.remote_log = / вар / журнал / xdebug.log
       xdebug.extended_info = 1
       xdebug.idekey = "NetBeans-Xdebug"
      

Процедура

Проблема

Я не могу объяснить, что является причиной проблемы или когда проблема проявляется. Он начинается, когда я пытаюсь отладить мой проект, что заставляет браузер моего браузера (Chrome) открывать URL-адрес моего проекта с параметром XDEBUG_SESSION_START=netbeans-xdebug . Это приводит к тому, что страница обычно отображается в хроме, а Netbeans сообщает только «Ожидание подключения».

Отладка XDebug

Во-первых, с сообщением «Ожидание подключиться» все еще жив, я попытаюсь использовать netstat, чтобы выкопать порт 9000, который выглядит примерно так :

 $ netstat -an | grep 9000 tcp6 0 0 :::9000 :::* LISTEN 

Я закрыл свою IDE и попытался использовать два файла, чтобы выяснить, что происходит: {webroot}/index.php содержит <?php phpinfo(); ?> <?php phpinfo(); ?> и {webroot}/dbgtest.php содержит скрипт проверки установки XDebug :

 <?php $address = '127.0.0.1'; $port = 9000; $sock = socket_create(AF_INET, SOCK_STREAM, 0); socket_bind($sock, $address, $port) or die('Unable to bind'); socket_listen($sock); $client = socket_accept($sock); echo "connection established: $client"; socket_close($client); socket_close($sock); ?> 

Когда я запускаю debugclient XDebug и открываю http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession , я обычно получаю регулярный вывод, а затем проверяю, что XDebug подключен к скрипту с netstat в другом терминале:

 $ netstat -an | grep 9000 tcp 0 0 127.0.0.1:9000 127.0.0.1:34831 ESTABLISHED tcp 0 0 127.0.0.1:34831 127.0.0.1:9000 ESTABLISHED 

Хотя оба эти, кажется, указывают на то, что соединение было сделано, веб-страница читает «Невозможно связать», что я не могу объяснить. Я Ctrl-c, чтобы закрыть debugclient, и netstat в этот момент проверяет, что порт 9000 не имеет активности. Я запускаю Netbeans, открываю {webroot}/index.php и задействую отладчик, который открывает http://127.0.0.1/index.php . Отладчик тогда обычно запускается нормально. Я останавливаю отладчик, вернусь к моему проекту, и именно здесь проблема действительно становится раздражающей: иногда я могу продолжить отладку своего проекта как обычно, а в других случаях проблема снова возникает, а в то время как «Ожидание Connect ", показывает netstat:

 $ netstat -an | grep 9000 tcp6 0 0 :::9000 :::* LISTEN tcp6 0 0 127.0.0.1:9000 127.0.0.1:34681 TIME_WAIT 

В другое время я перезагружаю компьютер, запускаю терминал и нахожу:

 $ netstat -an | grep 9000 unix 3 [ ] STREAM CONNECTED 9000 $ telnet 127.0.0.1 9000 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused 

Я недостаточно знаком с сетевыми и внутренними интерфейсами Linux, чтобы понять, на что это указывает. Ясно, что что- то использует порт 9000. Что это значит? Обратите внимание, что, несмотря на мои настройки в php.ini:

 $ cat /var/log/xdebug.log cat: /var/log/xdebug.log: No such file or directory 

Каков правильный способ отладки соединения между IDE и XDebug?

Если вы случайно используете клиент Cisco VPN, это может быть причиной. Он поставляется с брандмауэром, который всегда включен, даже если клиент не запущен. Его можно отключить в меню «Параметры».

Пожалуйста, прочитайте эту тему.

http://forums.netbeans.org/post-99369.html

в итоге обходным путем было добавить net.ipv6.bindv6only = 0 в файл /etc/sysctl.d/bindv6only.conf, а затем перезагрузиться. После этого Xdebug работал нормально.

Ну, моя разработка немного отличается от твоей, но я очень хорошо знаю эту проблему. На самом деле я просто решил это … на этот раз мой Fireeall заблокировал порт XDebug, чтобы поговорить с моей IDE.

Некоторые вещи приходят мне на ум при чтении вашей учетной записи:

1) «Я не могу объяснить, что является причиной проблемы или когда проблема проявляется ». Это очень важное утверждение b / c, как мы все знаем, технические решения строго зависят от того, что основная проблема возникает всегда или иногда, по-видимому, случайным образом. Итак … можете ли вы иногда выполнять XDebugging таким образом или никогда?

2) Когда ваша среда IDE ждет, и ваш браузер сразу же отобразит сайт, я думаю, что что-то не так с вашей IDE, чтобы запустить XDebug-сервер. B / c, если XDebug запустится и не сможет подключиться к вашему XDebug-клиенту, тогда веб-сайт не будет отображаться немедленно. Но в вашем случае GET-параметры просто игнорируются b / c, они не имеют никакого значения для вашего Apache / PHP-сервера, поскольку они ничего не знают о какой-то XDebug-сессии, которую вы хотели бы начать.

3) Ваши подходы к решению кажутся мне очень сложными. Сначала я хотел бы как можно проще проследить, как это работает. Например, «xdebug.idekey =« netbeans-xdebug »обычно не является обязательным для первой настройки.

Это мои два цента

Лучший Раффаэль