草庐IT

php - 如何从 CLI 调试 PHP CLI 脚本

coder 2023-12-31 原文

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

当然,稍后我想将它配置到我选择的 IDE 中(此时是 Eclipse),但我还没有设法让它工作。从 CLI 调试 PHP CLI 脚本对我来说是一个好的开始。

谢谢。

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

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

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

Andromeda:sudo find / -xdev -name php.ini /etc/php5/cli/php.ini /etc/php5/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 Andromeda:

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

Launching renameUser has encountered a problem. An internal error occurred during "Launching renameUser" java.lang.NullPointerException.

天哪...

  • 我还安装了 Zend Debugger 并将以下内容添加到相同的两个 php.ini 文件中:

zend_extension=/usr/lib/php5/20121212/ZendDebugger.so zend_debugger.allow_hosts=127.0.0.1/32, 192.168.0.0/16 zend_debugger.expose_remotely=always

  • 更改调试配置以使用 Zend Debugger 并尝试进行调试。收到:

Error launching 'renameUser' The debug session could not be started. Please make sure that the debugger is properly configured as a php.ini directive.

  • 重新启动 Eclipse,现在调试器尝试运行,但只是以 255 退出值终止,试图运行/opt/eclipse/plugins/org.zend.php.debug.debugger.linux.x86_64_5.3.18.v20110322/resources/php5/php-cgi。为什么它运行 php-cgi 超出了我的范围。我说过这是 CLI 而不是 CGI。无论如何,当我尝试从命令行运行它时,我得到以下信息:

Andromeda:/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: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

  • 在/opt/eclipse/plugins/org.zend.php.debug.debugger.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)进行调试,除了命令行之外什么都不需要

关于php - 如何从 CLI 调试 PHP CLI 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146594/

有关php - 如何从 CLI 调试 PHP CLI 脚本的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐