Как отлаживать скрипты PHP CLI из командной строки

Кто-нибудь знает, как отлаживать скрипты CLI PHP из CLI?!? Я не хочу отлаживать веб-страницу PHP - у меня нет веб-страницы PHP. Я не хочу отлаживать удаленный script либо - я запускаю/отлаживаю прямо здесь, в этой системе. Я не хочу (в это время) пытаться получить некоторую среду IDE (Eclipse, PhpStorm или что-то еще) для отладки CLI PHP, а просто хочу отлаживать некоторый PHP CLI script в самой командной строке Linux. В Perl это будет просто perl -d < script.pl > < опция > . Отладка script, для меня, не вычисляет ошибки компиляции или другие простые вещи. Для меня он устанавливает точки останова, запускает код, проверяет содержимое переменных и может произвольно выполнить или eval ('< php code > ') в отладчике.

Конечно, я хотел бы настроить это в свою IDE по выбору (в это время это Eclipse), но мне не удалось получить эту работу. Отладка из CLI для PHP CLI script была бы хорошим началом для меня.

Спасибо.

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

Здесь я попытался использовать xdebug и/или отладчик Zend с Eclipse:

  • Базовая версия Eclipse Mars.1 Release 4.5.
  • Версия плагина Eclipse PDT UI 3.7.0.2015112
  • Пробовал установку xdebug с помощью pecl install xdebug. Говорит, что мне нужно добавить "zend_extension = xdebug.so" в php.ini. В самом деле? Какой php.ini? У меня несколько:

Андромеда: sudo find/-xdev -name php.ini /etc/php 5/cli/php.ini /etc/php 5/apache2/php.in /opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php53/php.ini /opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php5/php.ini /opt/eclipse/plugins/com.zend.php.debug.debugger.php56.linux.x86_64_13.0.1.v20151112-2045/resources/php56/php.ini Андромеда:

  • Я поместил объект zend_extension в /etc/php 5/cli/php.ini и/etc/php5/apache2/php.ini. Сделал страницу phpinfo.php, и я вижу там Xdebug (да!). Настройте конфигурацию отладки в Eclipse, чтобы использовать xdebug и пытаться отлаживать:

При запуске renameUser возникла проблема. Внутренняя ошибка произошла во время "Запускаем renameUser" java.lang.NullPointerException.

О, хорошо...

  • Я также установил Zend Debugger и добавил следующие те же два файла php.ini:

zend_extension =/USR/Library/php5/20121212/ZendDebugger.so zend_debugger.allow_hosts = 127.0.0.1/32, 192.168.0.0/16 zend_debugger.expose_remotely = всегда

  • Изменена конфигурация отладки для использования Zend Debugger и попытка отладки. Поступила в редакцию:

Ошибка при запуске 'renameUser' Не удалось запустить сеанс отладки. Убедитесь, что отладчик правильно настроен как директива php.ini.

  • Перезапуск Eclipse, и теперь отладчик пытается запустить, но просто завершает работу с 255 выходным значением, пытающимся запустить /opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php5/PHP-CGI. Почему это runnign php-cgi вне меня. Я сказал, что это CLI, а не CGI. В любом случае я получаю следующее при попытке запустить это из командной строки:

Андромеда:/opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php5/php-cgi /opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php5/php-cgi: ошибка при загрузке разделяемых библиотек: libiconv.so.2: невозможно открыть файл общих объектов: Нет такого файла или каталога

  • Нашел libiconv.so.2 в /opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/lib и установил LD_LIBRARY_PATH, чтобы включить это, но это просто не удается запустите отладчик на всех, чтобы убедиться, что отладчик правильно настроен как директива php.ini... UGH!

Другие нечетные вещи:

  • Когда Eclipse запускается, он не может открыть мой проект на основе RSE, таким образом отображая буферы редактирования из последнего запуска как пустые
  • Eclipse больше не выйдет! Выберите "Файл: выход". Ничего не произошло. Нажмите на X в строке заголовка - ничего не происходит. Теперь я должен убить его, чтобы закрыть его!

Ответ 1

При отладке в командной строке вам нужно указать PHP, который вы хотите отлаживать также

http://xdebug.org/docs/remote

говорит

export XDEBUG_CONFIG="idekey=session_name"
php myscript.php

Предполагая, что xdebug включен (не имеет значения, какой из файлов INI в нем, но для него есть стандартное место для каждой ОС, обычно в папке conf.d с именем xdebug.ini, которая включена автоматически)

Это позволяет вам отлаживать cmdline script.

Лично я использую Vim с расширением Vdebug (xdebug для vim) для отладки и ничего, кроме командной строки, не требуется

Ответ 2

Ответ exussums работает на меня.

Кроме того, у меня есть следующее в /etc/php/7.0/cli/conf.d/20-xdebug.ini

zend_extension=xdebug.so

xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

xdebug.remote_enable=true
#xdebug.remote_enable=false

И я должен был сделать это: https://github.com/vim-vdebug/vdebug/issues/363

Ответ 3

Возможность устанавливать точки останова в PHP script требует наличия какого-либо загружаемого расширения отладчика либо XDebug, либо Zend Debugger.

И тогда вам нужен какой-то интерфейс для этого отладчика, чтобы ваши пожелания о известных моментах. Я не знаком с отладкой Perl, но я не слышал о какой-либо отладке на основе CLI на основе CLI - это всегда происходит в среде IDE, которая может обрабатывать протокол отладки одного из расширений.

Конечно, есть хорошая старая отладка var_dump();die('hi');, но это не включает продолжение выполнения кода после окончания script.;)

Ответ 4

То, что работало для меня, использовало dephpugger. Я нашел шаги, чтобы заставить отладку CLI работать здесь:

https://hackernoon.com/how-debug-php-applications-with-dephpugger-98cc234d917c

Я ранее установил xdebug и попробовал exussum ответ.

Шаги, которые я выполнил, приведены здесь для полноты.

Установите dephpugger:

composer global require 'tacnoman/dephpugger':'dev-master'

Поместите dephpugger на путь:

export PATH=$PATH:$HOME/.composer/vendor/bin

не забудьте включить в файл php точку останова:

xdebug_break();

откройте 2 терминала. За один проход:

dephpugger debug

В другом случае

dephpugger cli /path/file.php

заменив /path/file.php на путь к вашему файлу. если вам нужны аргументы командной строки для сценария php, укажите путь и аргументы в кавычках. Это все еще кажется немного хакерским. Я думаю, что настоящая хитрость - писать на языке, в котором встроен лучший отладчик.