在尝试使xdebug与Netbeans 8.0.2一起使用进行了将近24小时的苦战之后,我找到了一个解决方案,希望该解决方案可以用于所有Ubuntu和Ubuntu相关的堆栈。
问题编号1:PHP和xdebug版本必须兼容
有时,如果您正在运行Linux安装程序并apt-get安装xdebug,则无法获得正确的xdebug版本。就我而言,我有最新的php版本,但有一个旧的xdebug版本。那一定是由于我当前的Xubuntu版本。软件版本取决于存储库,而存储库则取决于您正在运行的OS版本。
解决方案:PHP具有一个名为PECL的简洁的扩展管理器。请按照此处给出的说明进行操作。首先,正如成员在评论中指出的那样,您应该安装PHP的开发人员软件包才能使PECL正常工作:
sudo apt-get install php5-dev
然后,使用PECL,您将能够安装xdebug的最新稳定版本:
sudo pecl install php5-xdebug
完成后,将安装正确版本的xdebug,但尚未准备就绪。之后,您需要启用它。我已经看到了许多有关如何执行此操作的建议,但事实上,PHP需要同时为客户端和服务器启用某些模块,在本例中为Apache。看来,此处的最佳实践是使用启用模块的内置方法,称为php5enmod。这里描述用法。
问题编号2:正确启用模块
首先,您需要进入/ etc / php5文件夹。在其中,您将找到3个文件夹apache2,cli和mods_available。mods_available文件夹包含文本文件,其中包含有关激活给定模块的说明。名称约定为[module] .ini。看看其中的一些,看看它们是如何设置的。
现在,您必须在mods_available文件夹中创建您的ini文件。创建一个名为xdebug.ini的文件,并将其粘贴在文件中:
[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
确保存在指令[xdebug],与上面的示例完全一样。模块必须正常工作。实际上,只需复制并粘贴整个代码,您将变得更加快乐。:D
注意:zend_extension路径非常重要。在此示例中,它指向PHP引擎的当前版本,但是您首先应该转到/ usr / lib / php5并确保用数字命名的文件夹是正确的。将名称调整为您在此处看到的名称,然后在其位置检查文件夹内的内容,以确保xdebug.so确实存在。如果您做的一切正确,应该是这样。
现在,在创建xdebug.ini之后,该启用该模块了。为此,请打开控制台并键入:
php5enmod xdebug
如果一切正常,PHP将创建两个指向该文件的链接,一个链接位于/etc/php5/apache2/conf.d内部,另一个链接位于/etc/php5/cli/conf.d内部。
重新启动Apache服务器,然后在控制台上键入以下命令:
php -v
您应该得到这样的内容:
PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans
这意味着PHP客户端确实读取了xdebug.ini文件并加载了xdebug.so模块。到现在为止还挺好。
现在,在您的Web服务器上的某个地方创建一个phpinfo脚本,然后运行它。如果一切正常,这是您应该看到的:
如果看到此消息,Apache也将加载该模块,您可能已经准备好了。现在让我们看看Netbeans是否可以正确调试。创建一个非常简单的脚本,添加一些变量,为其提供值,并在其上设置断点。现在按CTRL + F5,在调试器面板上单击“进入”,然后查看是否得到以下信息:
切记在tools / options / php下检查Netbeans配置以进行调试。它看起来应该像这样:
我希望这可以为这个相当模糊,令人困惑的问题提供一些启示。
最好的祝愿!
phpinfo()
报告为已加载的扩展程序?那是“工作”的意思吗?