使用xdebug和netbeans调试php-cli脚本?

72

我已经成功地从IDE本身启动了php-cli脚本调试会话,但是我需要从shell /命令行开始调试会话。 这些是相当复杂的维护PHP脚本,需要大量输入参数,因此在Netbeans中输入参数有点繁琐。

我以前用Zend Studio做过这件事:https://zend18.zendesk.com/hc/en-us/articles/203838096-Debugging-PHP-CLI-Scripts,但现在我需要让它在Netbeans上工作。

7个回答

111

我在Ubuntu/Netbeans上的操作步骤如下:

  • 将/etc/php5/apache2/php.ini中的xdebug配置行复制到/etc/php5/cli/php.ini文件中。
  • 设置一个名为调试会话的环境变量(您可以从netbeans启动调试时页面url的查询字符串中获取此信息),命令如下:export XDEBUG_CONFIG="idekey=netbeans-xdebug"

然后只需在netbeans中开始调试并在命令行中执行php myscript.php即可。

注意: 如果您想使用netbeans进行远程调试,则需要使用“Debug File”而不是常规的“Debug”选项来调试正在从命令行运行的文件。


2
感谢@AndrewHancox的支持,点个赞+1。对于调试控制台应用程序,我发现在项目属性→运行配置→高级设置中设置“不打开Web浏览器”也很有帮助... - Adam Monsen
14
在Windows中,您需要使用SET XDEBUG_CONFIG=idekey=xdebug(注意缺少引号!) - fishbone
1
GarouDan - 在命令提示符处使用 "php -i | grep php.ini" 检查您是否编辑了正确的文件,使用 "php -i | grep debug" 检查您是否在其中设置了调试设置。如果失败,请检查 idekey 是否已更改。 - Andrew Hancox
1
我尝试将 export XDEBUG_CONFIG="idekey=netbeans-xdebug" 放入 /etc/php5/cli/php.ini,但由于这很奇怪且没有任何作用,所以我在 Google 上搜索了 "Ubuntu export" 并了解到它应该在运行 php 脚本之前在终端中运行。对我来说这不是很明显。 - iVenGO
+1 谢谢。您也可以查看 http://xdebug.org/docs/remote 以获取有关环境变量的详细信息。 - Sid Kshatriya
显示剩余3条评论

44
xdebug.remote_autostart=On添加到您的php.ini文件中,或将-dxdebug.remote_autostart=On作为参数添加到PHP二进制调用(php -d... script.php)中。
请参阅 http://xdebug.org/docs/remote

3
我在Windows上使用PHPStorm作为我的IDE,根据约翰尼斯的回答,我这样调用我的PHP脚本: code php -dxdebug.remote_autostart=On -didekey=PHPSTORM -dremote_host=localhost -dprofiler_enable=1 MY_PHP_PAGE.php PARAM1 PARAM2 code - Coenie Richards
3
@Coenie Richards 这应该是: php -dxdebug.remote_autostart=On -dxdebug.idekey=PHPSTORM -dxdebug.remote_host=localhost MY_PHP_PAGE.php PARAM1 PARAM2(翻译者注:该命令用于运行 PHP 文件并启用调试模式,其中包括自动启动调试、指定 IDE 的密钥和远程主机地址,以及传递两个参数给 MY_PHP_PAGE.php 文件。) - Tim

16

我会把所有东西放在一起,以下是对我有效的方法。

file:
/etc/php5/cli/php.ini

zend_extension="/usr/lib/php5/20121212/xdebug.so" -> xdebug bin path
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_port=9000 -> same port configured in netbeans debugging tab
xdebug.idekey="netbeans-xdebug" -> same ide configured in netbeans debuggin tab
xdebug.remote_autostart=1

然后,不需要任何其他参数

php script.php


2

我曾经遇到过同样的问题,我的解决方案如下:

  1. 环境:Windows下Netbeans 8.2(Apache+PHP)
  2. 假设您已经配置了PHP和NetBeans以使用Xdebug调试代码(http://wiki.netbeans.org/HowToConfigureXDebug#Notes_on_Windows_Configuration)
  3. 在Netbeans中创建新的配置(“项目属性” > “运行配置” > “新建…”)
  4. 在新的配置中设置不要打开Web浏览器(“高级” > “不要打开Web浏览器”)
  5. 激活新的配置(工具栏下拉菜单)
  6. 为调试设置断点
  7. 打开调试(CTRL+F5)
  8. 打开终端窗口(“工具” > “在终端中打开”)
  9. 在终端中输入:$ export XDEBUG_CONFIG="idekey=netbeans-xdebug"(值"netbeans-xdebug"必须与“工具” > “选项” > “调试” > “会话ID”相符)
  10. 在终端中输入:$ php.exe -f "C:\Apache24\htdocs\www.SiteName\ScriptName.php" -- "Arg1=x&Arg2=y"
  11. 跟踪调试…

0

如果您不想为IDE配置xDebug(我讨厌配置),则可以使用Dephpugger项目。

https://github.com/tacnoman/dephpugger

你可以在终端中运行调试器,例如Python的ipdb和Ruby的byebug。


0

我曾经遇到过同样的问题,我的解决方案是:

在Netbeans中,进入项目窗口,右键单击PHP项目,选择属性,然后选择运行配置。创建一个新的配置。

填写正确的值:

  • 以“脚本”方式运行
  • 设置PHP解释器
  • 更改索引文件,在我的情况下是“cron/index.php”。

0

请确保您设置了DBGP_IDEKEY值,因为通常它不是idekey。 例如,在Linux上:

export DBGP_IDEKEY="netbeans-xdebug" 
export XDEBUG_CONFIG="netbeans-xdebug=netbeans-xdebug"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接