检查xdebug是否正常


81

如果不安装texteditor或IDE,是否可以测试xdebug是否正常运行,即它是否可以调试php代码?

phpinfo()中出现的xdebug唯一部分是:

其他.ini文件解析为/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()中没有其他地方提到它。


7
是否将其phpinfo()报告为已加载的扩展程序?那是“工作”的意思吗?
Wiseguy 2012年

2
如果它显示在您的phpinfo()上,则可以尝试在Xdebugs端口(默认为9000)上进行telnet
12年

@Wiseguy,我已经更新了问题。这是否意味着它已正确加载/工作?
oshirowanen 2012年

@ tix3,我已经更新了问题。这是否意味着它已正确加载/工作?
oshirowanen 2012年

2
如果扩展名是实际加载的,则应有自己的部分,列出其配置指令。
Wiseguy 2012年

Answers:


91

如果没有实际进行调试,我想您无法确定调试器是否在工作。

但是您可以肯定地说-我猜应该假设如果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。如果不是,则不是。


1
phpinfo()仅在中提及xdebug Additional .ini files parsed。现在检查其余建议。
oshirowanen

3
刚刚尝试xdebug_get_code_coverage(),我就知道了Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5
oshirowanen 2012年

7
很公平。确切地说,这告诉您xdebug的安装不正确。
Spudley 2012年

3
如果是这种情况,则仅供参考,然后应打开您的/etc/php/conf.d/xdebug.ini文件(已解析的其他.ini文件中提到的文件),并取消注释其中的所有行。 zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
托尼·莫雷洛

@TonyMorello我认为这对我有所帮助,因为我的php.ini是使用完整路径正确设置的,但是在Debian中也有一个/mods-available目录,并且xdebug.ini设置与我的php.ini设置存在冲突(我认为)。
PJ布鲁内特

67

php -m -c

在您的终端中,然后查找[Zend Modules]。如果已加载,它应该在某处!

NB

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

17
php --version还列出了Xdebug(如果已加载)
mfink

1
@mfink php --version对我不起作用。在启动我的机器之后,Apache启动并运行后,php --version显示Xdebug,但phpinfo()不显示xdebug部分。PHP脚本的执行不会在断点处停止。运行后service apache2 restartphpinfo()显示xdebug部分和调试工作。因此,由于某些原因,在机器启动期间Apache启动时不会加载xdebug。所以现在我必须在每次引导后重新启动Apache。
Buttle Butkus

35

尝试以下操作,应返回“存在”或“不存在”:

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

25

在尝试使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,在调试器面板上单击“进入”,然后查看是否得到以下信息:

运行中的xdebug

切记在tools / options / php下检查Netbeans配置以进行调试。它看起来应该像这样:

在Netbeans上调试配置

我希望这可以为这个相当模糊,令人困惑的问题提供一些启示。

最好的祝愿!


2
为我工作,此答案可能应该在xdebug或netbeans网站上
southerton

1
我必须安装PHP的开发人员软件包才能使PECL正常工作: sudo apt-get install php5-dev
直到

此外,php5enmod不会在ini文件中创建任何链接,即使没有,它也能正常工作。
直到2015年

1
还有一件事:[xdebug]ini文件中的指令对于使其起作用至关重要。在原始的ini文件中,[xdebug]缺少该事实令我感到困惑,但是对我而言,没有它是行不通的。
直到2015年

你好!您对安装PHP的开发人员包是正确的,我将对此进行相应更新。不确定您对php5enmod的评论。它在我指定的文件夹上创建链接。是的,[xdebug]指令势在必行,我也会更新该帖子以反映这一点。感谢您的反馈!
西奥T.卡兰萨

9

只是为了扩展KsaR的答案,并提供了从命令行检查xdebug的可能性:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"

6

您可以运行此小php代码

<?php
phpinfo();
?>

复制整个输出页面,并将其粘贴到此链接中。然后分析。它将显示是否已安装Xdebug。它将给出完成安装的说明。


3

如果使用的是Eclipse,请注意,在XDebug模式下运行时,魔术常数__FILE__将始终被评估为:

xdebug://debug-eval

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

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

2

在您的问题中,您提到您的phpinfo表示apache正在/etc/php5/apache2/conf.d/xdebug.ini中加载xdebug的配置。在许多在线说明中,您可能会注意到,他们要求您将xdebug配置放入php .ini(这就是我所做的)但是,如果配置设置为/etc/php5/apache2/conf.d/xdebug.ini,则应从/ etc / php5 / apache2中删除[XDebug]配置设置/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重新启动

然后它应该工作!!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.