检查xdebug是否正在工作

没有安装文本编辑器或IDE,是否有可能testingxdebug是否工作,即如果它可以debugging的PHP代码?

只有部分xdebug出现在phpinfo()中,如下所示:

附加的.ini文件parsing/etc/php5/apache2/conf.d/mysql.ini,/etc/php5/apache2/conf.d/mysqli.ini,/etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini,/etc/php5/apache2/conf.d/xdebug.ini

它在其他地方的phpinfo()中没有提到。

如果不真正做一些debugging,我想你不能确定一个debugging器正在工作。

但是你可以肯定 – 我想应该假设,如果xDebug的某些方面正在工作,那么它将全部工作。

鉴于此,您可以通过尝试以下操作来确认xDebug已安装并就位:

1) phpinfo() – 这将显示所有加载的扩展,包括xDebug。 如果它在那里,那么它是可行的。

2)如果你不够好,你可以尝试使用var_dump()函数。 xDebug修改var_dump()的输出以包含附加信息。 如果这到位,那么xDebug正在工作。

3)xDebug修改PHP的错误输出。 如果你的程序在xDebug中崩溃,你会得到比标准的PHP崩溃输出更多的失败信息。

4)xDebug也为PHP增加了一些辅助函数。 你可以尝试其中的任何一个,看看它是否工作。 例如,函数xdebug_get_code_coverage()应该存在并返回一个数组。 如果是这样,则安装xDebug。 如果不是,那不是。

 php -m -c 

在您的terminal中,然后查找[Zend Modules] 。 它应该在某个地方,如果它被加载!

NB

如果您使用的是Ubuntu,可能不会在这里显示,因为您需要将/etc/php5/apache2/php.ini的xdebug设置添加到/etc/php5/cli/php.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 

经过长达24小时的苦苦试图让xdebug与Netbeans 8.0.2一起工作,我发现了一个解决scheme,我希望它能适用于Ubuntu和Ubuntu相关的所有堆栈。

问题1:PHP和xdebug版本必须兼容

有时候,如果你正在运行一个Linux安装程序,apt-get来安装xdebug,它将不会得到适当的xdebug版本。 在我的情况下,我有最新的PHP版本,但一个旧的xdebug版本。 这一定是由于我目前的Xubuntu版本。 软件版本取决于存储库,这取决于您正在运行的操作系统版本。

解决scheme:PHP有一个简洁的扩展pipe理器,称为PECL。 按照这里给出的指示启动并运行。 首先,正如评论中的成员所指出的那样,您应该安装PHP的开发包以获得PECL的工作:

 sudo apt-get install php5-dev 

然后,使用PECL,您将能够安装最新的稳定版本的xdebug:

 sudo pecl install php5-xdebug 

一旦你做到了,正确版本的xdebug将被安装,但不准备使用。 之后,你需要启用它。 我已经看到了很多关于如何去做的build议,但事实是,PHP需要一些模块来启用客户端和服务器,在这种情况下,Apache。 看来这里最好的做法是使用内置的启用模块的方法,称为php5enmod。 用法在这里描述。

问题2:正确启用模块

首先,你需要进入/ etc / php5文件夹。 在那里,你会发现3个文件夹,apache2,cli和mods_available。 mods_available文件夹包含带有激活给定模块的指令的文本文件。 名称约定是[module] .ini。 看看其中的一些,看看他们是如何设置的。

现在你将不得不在mods_available文件夹中创build你的ini文件。 创build一个名为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_extensionpath非常重要。 在这个例子中,它指向PHP引擎的当前版本,但是你应该先到/ usr / lib / php5并确保用数字命名的文件夹是正确的。 将名称调整为任何您在其中看到的名称,然后检查文件夹内部以确保xdebug.so确实存在。 应该是,如果你做的一切正确。

现在,创build你的xdebug.ini,是时候启用模块了。 要做到这一点,打开一个控制台,然后键入:

 php5enmod xdebug 

如果一切正常,PHP创build两个链接到这个文件,一个在/etc/php5/apache2/conf.d里面,另一个在/etc/php5/cli/conf.d里面

重新启动Apache服务器并在控制台上input:

 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服务器上的某处创build一个phpinfo脚本,然后运行它。 如果万事如意,这就是你应该看到的:

在这里输入图像说明

如果你看到这个,Apache也加载了这个模块,你可能已经准备好了。 现在让我们看看Netbeans是否能够正确debugging。 创build一个非常简单的脚本,添加一些variables,赋予它们值,并设置一个断点。 现在点击CTRL + F5,在你的debugging器面板上点击“step in”,看看你是否得到这样的东西:

在行动中的xdebug

请记住检查Netbeansconfigurationdebugging,在工具/选项/ PHP。 它应该看起来像这样:

在Netbeans上调试配置

我希望能够对这个相当模糊,混乱的问题有所了解。

最好的祝愿!

尝试如下,应返回“存在”或“不存在”:

 <?php echo (extension_loaded('xdebug') ? '' : 'non '), 'exists'; 

如果你正在使用Eclipse,那么请注意,在XDebug模式下运行时,magic_常量__FILE__将被评估为:

 xdebug://debug-eval 

因此,如果您的会话在XDebug下,以下检查将返回true

 $is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug 

在你的问题中,你提到你的phpinfo是指出apache在/etc/php5/apache2/conf.d/xdebug.ini中加载xdebug的configuration在很多网上说明中你可能会注意到他们要求你把xdebugconfiguration放在php .ini(这就是我所做的)然而,如果configuration设置为/etc/php5/apache2/conf.d/xdebug.ini,那么你应该从/ etc / php5 / apache2中删除[XDebug]configuration设置/php.ini,并把它放在/etc/php5/apache2/conf.d/xdebug.ini INSTEAD。 一旦我从/etc/php5/apache2/php.ini中删除,而不是/etc/php5/apache2/conf.d/xdebug.ini,并重新启动apache,它的工作!

因此,在你的/etc/php5/apache2/conf.d/xdebug.ini中,放入以下内容:

 [XDebug] zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so" xdebug.remote_enable=1 xdebug.remote_port="9000" xdebug.profiler_enable=1 xdebug.profiler_output_dir="/home/paul/tmp" xdebug.remote_host="localhost" xdebug.remote_handler="dbgp"; xdebug.idekey="phpstorm_xdebug" 

然后从/etc/php5/apache2/php.ini中删除,如果你把它放在那里。

然后做:

sudo服务apache2重启

那么它应该工作!

你可以运行这个小的php代码

 <?php phpinfo(); ?> 

复制整个输出页面,粘贴到这个链接 。 然后分析。 它会显示是否安装了Xdebug。 它会给出说明来完成安装。