在经历了近24个小时的痛苦奔跑尝试让xdebug与Netbeans 8.0.2一起工作后,我找到了一个解决方案,我希望这个方案适用于所有的Ubuntu和相关堆栈。
问题1:PHP和xdebug版本必须兼容
有时,如果您运行的是Linux设置并使用apt-get安装xdebug,则不会获得正确的xdebug版本。在我的情况下,我有最新的php版本但是旧的xdebug版本。这可能是由于我的当前Xubuntu版本。软件版本依赖于存储库,这些存储库依赖于您正在运行的操作系统版本。
解决方案: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脚本,并运行它。如果一切正常,您应该看到以下内容:
![enter image description here](https://istack.dev59.com/so4Fo.webp)
如果您看到这个,Apache也加载了该模块,您可能已经准备就绪了。现在让我们看看Netbeans是否能够正确地进行调试。创建一个非常简单的脚本,添加一些变量,给它们赋值,并在它们上面设置一个断点。现在按下CTRL+F5,在调试器面板上点击“step in”,看看是否会得到像这样的结果:
![xdebug in action](https://istack.dev59.com/mth46.webp)
请记得检查Netbeans针对调试的配置,可以在工具/选项/PHP下找到。它应该看起来像这样:
![Debugging configurations on Netbeans](https://istack.dev59.com/E93hQ.webp)
希望这能解决这个相当晦涩和混乱的问题。
最好的祝愿!
phpinfo()
会报告它作为一个已加载的扩展吗?这就是你所说的“工作”吗? - Wiseguyxdebug.default_enable=1
是0。 - laggingreflex