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

Preamble

Как и многие, я потратил больше часов на отладку подключения моей 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 со встроенным отладчиком 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 = / var / log / xdebug.log
      xdebug.extended_info = 1
      xdebug.idekey = "netbeans-xdebug"
      

Процедура

Проблема

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

Отладка XDebug

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

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

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


Когда я запускаю XDebug debugclient и открываю 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, чтобы выйти из отладочного клиента, и netstat в этот момент проверяет, что порт 9000 не активен. Я запускаю Netbeans, открываю {webroot} /index.php и включаю отладчик, который открывает http://127.0.0.1/index.php . Затем отладчик обычно запускается нормально. Я останавливаю отладчик, возвращаюсь к своему проекту, и здесь проблема действительно становится раздражающей: иногда я могу продолжить отладку своего проекта в обычном режиме, а иногда проблема возникает снова, и пока отображается значок «Ожидание подключения», 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?

29
задан Bill the Lizard 30 July 2012 в 00:59
поделиться