如何从CLI调试PHP CLI脚本


How to debug PHP CLI scripts from the CLI

有人知道如何从CLI调试CLIPHP脚本吗?!?我不想调试PHP网页——我没有PHP网页。我也不想调试远程脚本——我正在这个系统上运行/调试。我不想(现在)尝试使用一些IDE(Eclipse、PhpStorm或其他什么)来调试CLI PHP,我只想在Linux命令行本身调试一些PHP CLI脚本。在Perl中,这将是简单的Perl-d<script.pl>lt;选项>。对我来说,调试脚本并不是找出编译错误或其他简单的事情。对我来说,这是设置断点、运行代码、检查变量的内容,以及能够在调试器中任意执行或评估("<php代码>")。

当然,稍后我想将其配置到我选择的IDE中(现在是Eclipse),但我还没有成功。从CLI调试PHP CLI脚本对我来说将是一个良好的开端

谢谢。

我不知道为什么我在发表评论时被限制在字数以内。也许我可以在这里添加更多的文本。

以下是我在Eclipse中使用xdebug和/或Zend调试器时所做的尝试:

  • 基础Eclipse版本Mars.1 4.5版
  • Eclipse PDT UI插件版本3.7.0.2015112
  • 尝试使用pecl-install-xdebug安装xdebug。说我需要在php.ini中添加"zend_extension=xdebug.so"。真的吗?哪个php.ini?我有几个:

仙女座:sudo find/-xdev-name php.ini/etc/php5/cli/php.ini/etc/php5/apache2/php.in/opt/eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322/resources/php53/hp.ini/opt/eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322/resources/php5/php.ini/opt/eclipse/plugins/com.zend.php.debug.debuger.php56.linux.x86_64_13.0.1.v20151112-2045/resources/php56/php.ini仙女座:

  • 我把zend_extension放在/etc/php5/cli/php.ini和/etc/php5/apache2/php.ini中。制作了一个phpinfo.php页面,我在那里看到了Xdebug(是的!)。在Eclipse中配置调试配置以使用xdebug并尝试调试:

启动renameUser时遇到问题。在"启动renameUser"java.lang.NullPointerException期间发生内部错误。

天啊。。。

  • 我还安装了Zend调试器,并在这两个php.ini文件中添加了以下内容:

zend_extension=/usr/lib/php5/20121212/ZendDebugger.sozend_debugger.allow_hosts=127.0.0.1/3219192.168.0.0/16zend_debugger.exexpe_remote=始终

  • 已将调试配置更改为使用Zend Debugger,并尝试进行调试。收到时间:

启动"renameUser"时出错调试会话无法启动。请确保调试器正确配置为php.ini指令。

  • 重新启动Eclipse,现在调试器尝试运行,但只是以255退出值终止,尝试运行/opt/Eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322-resources/php5/php-cgi。为什么它运行php-cgi我不明白。我说这是CLI而不是cgi。在任何情况下,当尝试从命令行运行此程序时,我都会得到以下信息:

Andromeda:/opt/eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322/resources/php5/php-cgi/opt/eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322/resources/php5/php-cgi:加载共享库时出错:libiconv.so.2:无法打开共享对象文件:没有这样的文件或目录

  • 在/opt/eclipse/plugins/org.zend.php.debug.debuger.linux.x86_64_5.3.18.v20110322-resources/lib中找到了一个libiconv.so.2,并将LD_LIBRARY_PATH设置为包含它,但这根本无法启动调试器,并声明确保调试器正确配置为php.ini指令。。。啊

其他奇怪的东西:

  • 当Eclipse启动时,它无法打开我的基于RSE的项目,从而将上次运行的编辑缓冲区显示为空
  • Eclipse将不再退出!选择"文件:退出"。什么也没发生。点击标题栏中的X-什么也没发生。现在我必须杀死它才能关闭它

在命令行上调试时,您需要告诉PHP您也要调试

http://xdebug.org/docs/remote

表示

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

假设启用了xdebug(它在哪个.ini文件中并不重要,但每个操作系统都有一个标准的位置,通常在一个名为xdebug.ini的conf.d文件夹中,该文件夹是自动包含的)

这允许您调试cmdline脚本。

就我个人而言,我使用带有Vdebug扩展的Vim(Vim的xdebug)进行调试,只需要一个命令行即可。我在这里找到了让CLI调试工作的步骤:

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

我之前安装了xdebug,并尝试了exussum的答案。

为了完整起见,此处包含了我所遵循的步骤。

安装分离器:

composer global require “tacnoman/dephpugger”:”dev-master”

将去Pugger放在路径上:

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

确保在断点处的php文件中包括:

xdebug_break();

打开2个终端实例。一次运行:

dephpugger debug

在另一次运行

dephpugger cli /path/file.php

将/path/file.php替换为文件的路径。如果您需要php脚本的命令行参数,请将路径和参数放在引号中。它看起来仍然有点暴躁。我认为真正的诀窍是用一种内置了更好调试器的语言编写。

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

要在PHP脚本中设置断点,需要加载某种调试器扩展,XDebug或Zend debugger。

然后,您需要这个调试器的某种接口,以使您对断点的愿望为人所知。我不熟悉Perl调试,但我还没有听说过任何基于PHP CLI的调试——它总是在能够处理其中一个扩展的调试协议的IDE中进行。

当然,还有不错的旧var_dump();die('hi');调试,但这不包括在脚本结束后继续执行代码。)