Подтвердить что ты не робот

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

Преамбула

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


Настройка

  • Ubuntu 10.10
  • Netbeans 6.9.1
  • PHP 5.3.3-1ubuntu9 с Suhosin-Patch
  • Xdebug v2.1.0 с debugclient, созданным 20 сентября 2010 г. из источника, с помощью индивидуальных инструкций по установке script на xdebug.org
  • Apache Apache/2.2.16
  • Оба /etc/php 5/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=/var/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(); ?>, а {webroot}/dbgtest.php содержит Проверка установки XDebug script:

<?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);
?>

Когда я запускаю XDebug debugclient и открываю http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession, я обычно получаю регулярный вывод , а затем проверяет, что XDebug подключен к script с 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?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Ну, моя разработка - несколько отличается от твоей, но я очень хорошо знаю эту проблему. На самом деле я просто решил это... на этот раз мой 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 "обычно не является обязательным для первой настройки.

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

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