96

如果不安装文本编辑器或 IDE,是否可以测试 xdebug 是否正常工作,即是否可以调试 php 代码?

xdebug 出现在 phpinfo() 中的唯一部分如下:

其他.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() 中都没有提到它。

4

12 回答 12

103

如果不实际进行一些调试,我想您无法确定调试器是否正常工作。

但是您可以非常确定——我想应该假设如果 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。如果不是,则不是。

于 2012-12-26T21:41:30.260 回答
74

php -m -c

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

注意

如果您使用的是 Ubuntu,它可能不会显示在此处,因为您需要将xdebug设置添加/etc/php5/apache2/php.ini/etc/php5/cli/php.ini.

我的 Xdebug 设置:

对于 Xdebug 3 (及更高版本)

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.mode=debug
xdebug.client_host=localhost
;# The default is 9003
xdebug.client_port=9000

对于 Xdebug 2.9 (或更低版本)

[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
于 2014-03-27T20:10:45.377 回答
42

尝试如下,将返回xDebug does exists.xDebug doesn't exists.

<?=sprintf('xDebug does%s exists.', extension_loaded('xdebug') ? '' : "n't");

在 CLI 上:

php -r "printf('xDebug does%s exists.' . PHP_EOL, 
extension_loaded('xdebug') ? '' : 'n\'t');"
于 2015-10-01T22:59:50.997 回答
29

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

问题一: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。用法在此处描述。

问题二:正确启用模块

首先,您需要进入 /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,点击调试器面板上的“step in”,看看你是否得到这样的结果:

xdebug 在行动

请记住在工具/选项/php 下检查 Netbeans 配置以进行调试。它应该看起来像这样:

在 Netbeans 上调试配置

我希望这能对这个相当模糊、令人困惑的问题有所了解。

最良好的祝愿!

于 2015-03-08T12:40:58.150 回答
13

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

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"
于 2018-11-08T13:49:11.030 回答
7

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

php -r "xdebug_info();"

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

于 2020-12-16T20:41:57.603 回答
6

你可以运行这个小php代码

<?php
phpinfo();
?>

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

于 2017-06-30T09:43:07.597 回答
3

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

xdebug://debug-eval

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

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
于 2015-05-17T17:47:32.327 回答
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 重启

然后它应该工作!

于 2015-02-13T06:10:57.693 回答
1

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

在此处输入图像描述

于 2021-07-21T09:17:02.683 回答
0

请注意,在xDebug 3中,配置选项已更改。PhpStorm 手册:配置 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();"
于 2021-06-11T00:57:46.867 回答
0

我意识到这个问题有点老了,但是 xdebug 3 出来了,很多事情都发生了变化。

php.exe -r "xdebug_info();"

仍然有效,但 php.ini 中的配置不同:

对于xampp安装(php 8.0.12),我有:

[xdebug]
zend_extension="C:\xampp\php\zend_ext\php_xdebug-3.1.1-8.0-vs16-x86_64.dll"
xdebug.output_dir="c:/xampp/xdebug"
xdebug.mode=debug
xdebug.log=c:/xampp/xdebug/xdebug.log
xdebug.log_level=7
xdebug.profiler_output_name=%p.%t.cgrind

它还将编写一个xdebug.log 包含以下内容的文件:

[8028] Log opened at 2021-10-28 09:42:33.878279
[8028] [Config] INFO: Trigger value for 'XDEBUG_TRIGGER' not found, falling back to 'XDEBUG_SESSION'
[8028] [Config] INFO: No shared secret: Activating
[8028] [Step Debug] INFO: Connecting to configured address/port: localhost:9003.
[8028] [Step Debug] ERR: Time-out connecting to debugging client, waited: 200 ms. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
[8028] Log closed at 2021-10-28 09:42:34.298475

对于wampserver,xdebug 包含在内并且开箱即用。这使它更容易使用。

于 2021-10-28T09:51:08.397 回答