2013-07-22 5 views
5

Я следовал Rafael Dohms's article, чтобы использовать инструменты отладки NetBeans для тестов phpunit.Отладка NetBeans не работает для тестов phpunit

Проблема заключается в том, когда я начинаю отладку в NetBeans и запускаю тест с использованием командной строки, NetBeans переключается с состояния ожидания на соединение «netbeans-xdebug runnig». Но программа останавливается в командной строке после «cofiguration read from ...», а также никаких действий отладки («Шаг за шагом», «Шаг в и т. Д.») Активны.

Я попытался отключить опцию «Стоп в первой строке», а также использовать отладочный файл для отладки, но ни один из них не работал.

Я пропустил что-то в конфигурации или с помощью инструментов NetBeans?

обновление

Я попытался решить эту проблему с помощью NetBeans, но это не сработало. наконец, я использовал PhpStrom для отладки кода, хотя я получил тот же результат, мне удалось отладить обычную программу CLI, а также отслеживать мою тестовую программу phpunit. Я понял, что отладка замерзает в "грушу \ PHPUnit \ Util \ PHP.php" файл, в следующей строке:

$stdout = stream_get_contents($pipes[1]); 

Я использую Windows 7 и PHP-v5.3

+0

Можете ли вы отладки при выполнении какой-то PHP из командной строки? Потому что на самом деле это то, что делает Netbeans. – qrazi

+0

Тот же результат; за исключением того, что этот файл полностью выполнен, но никогда не останавливается в каких-либо точках останова. –

+0

Какая ОС вы используете? Отладка работает в браузере? – qrazi

ответ

0

Вам нужно установили Xdebug на веб-сервер, как правило, на порту 9000.

Проверьте этот блог, как настроить Xdebug http://bogdan-albei.blogspot.co.uk/2010/06/php-remote-debugging-with-xdebug-and.html

Из того, что вы написали мне кажется, что Xdebug не работает.

+0

Как я уже упоминал в обновлении, кажется, что xdebug отлично работает –

+0

У меня была проблема с запуском xdebug на порте 9000, поэтому я переключил его на порт 9003, а затем он работал нормально. Также cli и webserver могут использовать разные файлы php.ini. –

0

Убедитесь, что параметр отладки как apache2 и кли php.ini

добавить следующую запись в оба эти файлы

/etc/php5/cli/php.ini

/и т.д./php5/apache2/php.ini

[xdebug] 
zend_extension = /usr/lib/php5/20090626/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 
0

проблема может быть с помощью строгого режима в PHPUnit, например, в phpunit.xml.

Из-за этой остановки остановки в точке останова запускается тайм-аут. Без строгого режима таймауты не активны.

0

У меня была такая же проблема, и нигде не найдено правильное решение, но теперь я отлаживаю свои тестовые примеры. Я надеюсь, что это короткое «как» будет полезно для вас.

Когда вы отлаживаетесь в браузере, существуют только отличия суперглобальных переменных $ _SERVER, поэтому в первую очередь вам это нужно.

Просто выбросить исключение в тестовом случае для нелогич-:

throw new Exception(json_encode($_SERVER));

Если все нормально, то вы увидите что-то вроде этого в тестовом сообщении об ошибке:

{"ALLUSERSPROFILE":"C:\ProgramData","APPDATA":"C:\User......

создать файл (например, названный: «phpunit-debug._SERVER.json») и скопируйте полную строку json в этот файл.

второй, вы должны создать файл "PHPUnit-debug.php" с таким содержимым:

$_SERVER = (array) json_decode(file_get_contents("phpunit-debug._SERVER.json")); // include your bootstrap if it's necessary... include 'c:\xampp\php\phpunit'; // TADAA! your PHPUnit tricked and believe // that you called by NetBeans ;) but can // debugging with xdebug as usually

3

Нашли этот пост при поиске линии

$stdout = stream_get_contents($pipes[1]); 

в сочетании с ключевые слова xdebug и phpunit.

Я застрял с равными симптомами, phpstorm (никогда не пробовал netbeans) в конечном итоге привел меня к этой линии застопоривания.

Во время перехода к этой строке я заметил некоторые упоминания о «изоляции процесса», из-за чего я отказался от параметра -process-изоляции в моем вызове xdebug (это само по себе мы используем для обхода утечки памяти). Теперь строка прослушивания не вызывается, а нормальная операция xdebug/unittest operation

Не претендуя на то, что это решение, но по крайней мере было подходящим для меня способом обхода. Также может дать какое-то направление на самом деле проблема/решение

+0

Как вы отбросили параметр изоляции процесса? – jorgetutor

+0

iirc это был просто параметр CLI в ручном CLI phpunit с запуском xdebug .. Отказ от параметра - это вопрос просто не набрав его;) Я думаю, что изоляция процесса также может быть параметром где-то в phpunit.xml, но я не сделал использовать это. – ArjanW

0

Возможно, все изменилось, но я не смог инициировать соединение с терминалом при запуске phpunit с Netbeans 8.1 после того, как попробовал каждый из предыдущих ответов здесь. В лучшем случае это просто скажем в консоли nb, запустите ... сделанный. Никогда не ожидайте подключения.

Что для меня работало, было инициировать его из Netbeans.

Вот некоторые инструкции, которые работали для меня на Ubuntu 16,04предполагая PHP и NetBeans уже установлены и работают.

  1. Установите расширение Xdebug

    sudo apt install php-xdebug 
    
  2. Включить его

    sudo phpenmod xdebug 
    
  3. Добавить переменные среды php.ini или /etc/php/7.0/cli/conf.d/20-xdebug.ini

    zend_extension=xdebug.so 
    xdebug.idekey=netbeans-xdebug 
    xdebug.remote_enable= On 
    xdebug.remote_handler=dbgp 
    xdebug.remote_mode=req 
    xdebug.remote_host=127.0.0.1 
    xdebug.remote_port=9000 
    
  4. Я требую PHPUnit в моем проекте как composer Dev зависимость а, чтобы исполняемый расположен в vendor/bin/phpunit и это файл, чтобы установить, как «Index File»

  5. я использую phpunit.xml configuration file для установки параметров и тестирования в моей корневой папке проекта. Таким образом, вы должны установить, что расположение каталога как «рабочий каталог» так, что он поднимает ваш загрузчик и т.д.

screenshot netbeans project properties

Смежные вопросы