检查xdebug是否正常工作

时间:2012-12-26 21:31:16

标签: php xdebug

如果没有安装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()中没有提到它。

11 个答案:

答案 0 :(得分:74)

如果没有实际进行一些调试,我猜你不能某些调试器工作。

但你可以非常肯定 - 我想人们应该假设,如果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 :(得分:54)

运行

php -m -c
在您的终端中

,然后查找[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

答案 2 :(得分:24)

尝试如下,应该返回&#34;存在&#34;或&#34;不存在&#34;:

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

答案 3 :(得分:20)

经过近24小时的苦苦尝试使xdebug与Netbeans 8.0.2一起工作后,我找到了一个解决方案,我希望它能适用于所有Ubuntu和Ubuntu相关的堆栈。

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

有时,如果您正在运行Linux安装程序并且apt-get安装xdebug,它将无法为您提供正确的xdebug版本。在我的情况下,我有最新的PHP版本,但旧的xdebug版本。这必须归功于我目前的Xubuntu版本。软件版本依赖于存储库,这取决于您运行的操作系统版本。

解决方案:PHP有一个称为PECL的简洁扩展管理器。按照here给出的说明启动并运行它。 首先,正如评论中的成员所指出的,您应该安装PHP的开发人员包以使PECL工作:

sudo apt-get install php5-dev

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

sudo pecl install php5-xdebug

执行此操作后,将安装正确版本的xdebug但尚未准备好使用。之后,您需要启用它。我已经看到了很多关于如何做的建议,但事实是PHP需要为客户端和服务器启用一些模块,在本例中是Apache。看来这里最好的做法是使用内置的启用模块的方法,称为php5enmod。用法描述为here

问题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

如果你看到这个,Apache也加载了模块,你可能已经准备好了。现在让我们看看Netbeans是否会正确调试。创建一个非常简单的脚本,添加一些变量,为它们赋值,并在它们上设置断点。现在点击CTRL + F5,点击&#34;进入&#34;在你的调试器面板上,看看你是否得到这样的东西:

xdebug in action

请记住在tools / options / php下检查Netbeans配置以进行调试。看起来应该是这样的:

Debugging configurations on Netbeans

我希望这可以解释这个相当模糊,令人困惑的问题。

祝福!

答案 4 :(得分:4)

您可以运行这个小php代码

<?php
phpinfo();
?>

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

答案 5 :(得分:2)

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

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

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

{{1}}

答案 6 :(得分:1)

在您的问题中,您提到您的phpinfo声明apache正在/etc/php5/apache2/conf.d/xdebug.ini中加载xdebug的配置 在网上的许多说明中你可能会注意到,如果配置设置为/etc/php5/apache2/conf.d/xdebug,他们会要求你把xdebug配置放在php.ini中(这就是我所做的)。但是,如果配置设置为/etc/php5/apache2/conf.d/xdebug。 ini,然后你应该从/etc/php5/apache2/php.ini中删除[XDebug]配置设置并将它放在/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 service apache2 restart

然后它应该工作!!!

答案 7 :(得分:1)

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

NULLIF

答案 8 :(得分:0)

从xdebug 3开始,您可以使用以下命令行:

php -r "xdebug_info();"

它将显示有关xdebug安装的有用信息。

答案 9 :(得分:0)

请注意 xDebug 3 的配置选项 have changed。 PhpStorm 手册:Configure xDebug 也很好地解释了它(它带有一个正在上传的验证器脚本)。 在弄乱了无法配置的 PECL 版本后,答案是:

su
dnf remove php-xdebug
dnf install php-devel

cd /usr/src
wget https://xdebug.org/files/xdebug-3.0.4.tgz
tar -xvzf xdebug-3.0.4.tgz
cd xdebug-3.0.4/
phpize
./configure --enable-xdebug
make
make install

xDebug 3 使用这样的配置(注意 [xdebug] 部分):

; Enable xdebug extension module
zend_extension=xdebug.so

[xdebug]
xdebug.mode=debug
xdebug.client_host=localhost
xdebug.client_port=9003

这两个文件中的内容:

nano /etc/php-cli.d/xdebug.ini
nano /etc/php.d/xdebug.ini 

然后可以允许网络连接并重新加载 INI:

setsebool -P httpd_can_network_connect 1
systemctl restart php-fpm.service

最后:

php -r "xdebug_info();"

答案 10 :(得分:0)

您可以在终端中使用此命令 php -v 来检查是否安装了 xdebug

enter image description here