Как отлаживать скрипты 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, укажите путь и аргументы в кавычках. Это все еще кажется немного хакерским. Я думаю, что настоящая хитрость - писать на языке, в котором встроен лучший отладчик.