Xdebug

Xdebug 是 PHP 的一个扩展,可为 PHP 脚本提供调试和剖析信息。Xdebug 可显示错误的完整跟踪信息,包括函数名、行号和文件名。此外,它还能使用不同的集成开发环境(如 Sublime Text、Eclipse、PHP Storm 和 Zend Studio)对脚本进行交互式调试。

要检查 PHP 安装中是否安装并启用了 Xdebug,我们需要检查 phpinfo() 的详细信息。在 phpinfo 详细信息页面,搜索 Xdebug,应该会看到与下面截图类似的详细信息:

image 2023 11 05 21 04 51 144

这意味着我们的 PHP 安装已安装了 Xdebug。现在,我们需要配置 Xdebug。Xdebug 配置要么在 php.ini 文件中,要么有单独的 .ini 文件。在我们的安装中,我们将在 /etc/php/7.0/fpm/conf.d/ 路径下放置一个单独的 20-xdebug.ini 文件。

在本书中,我们将使用 Laravel 的 Homestead Vagrant box。它为 Ubuntu 14.04 LTS 安装提供了完整的工具,包括带有 Xdebug 的 PHP7、NGINX 和 MySQL。对于开发目的来说,这个 Vagrant box 是一个完美的解决方案。更多信息,请访问 https://laravel.com/docs/5.1/homestead

现在,打开 20-xdebug.ini 文件并在其中放置以下配置:

zend_extension = xdebug.so
xdebug.remote_enable = on
xdebug.remote_connect_back = on
xdebug.idekey = "vagrant"
bash

以上是我们应该使用的启用远程调试和设置 IDE 密钥的最低配置。现在,在终端发出以下命令重启 PHP:

sudo service php-fpm7.0 restart
bash

现在我们准备调试一些代码。

使用 Sublime Text 进行调试

Sublime Text 编辑器有一个插件,可用于使用 Xdebug 调试 PHP 代码。首先,为 Sublime Text 安装 xdebug 软件包。

在本主题中,我们将使用仍处于测试阶段的 Sublime Text 3。您可以自行选择使用版本 2 或版本 3。

首先,转到工具| 命令托盘。 将显示类似于以下内容的弹出窗口:

image 2023 11 05 21 08 44 244

选择软件包控制: 安装软件包,弹出类似下面截图的窗口:

image 2023 11 05 21 09 11 258

输入 xdebug,就会显示 Xdebug 客户端包。点击它并等待一段时间,直至安装完成。

现在,在 Sublime Text 中创建一个项目并保存。打开 Sublime Text 项目文件并在其中插入以下代码:

{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "."
        }
    ],
    "settings": {
        "xdebug": {
            "path_mapping": {
              "full_path_on_remote_host" : "full_path_on_local_host"
            },
            "url" : http://url-of-application.com/,
            "super_globals" : true,
            "close_on_stop" : true,
        }
    }
}
json

突出显示的代码很重要,必须输入 Xdebug。路径映射是最重要的部分。它应该包含远程主机上应用程序根目录的完整路径,以及本地主机上应用程序根目录的完整路径。

现在,让我们开始调试。在项目根目录下创建一个文件,命名为 index.php,并在其中添加以下代码:

$a = [1,2,3,4,5];
$b = [4,5,6,7,8];

$c = array_merge($a, $b);
php

现在,右键单击编辑器中的一行,选择 Xdebug。然后点击 添加/删除断点。让我们添加几个断点,如下图所示:

image 2023 11 05 21 12 17 376

在某一行添加断点后,左侧靠近行号的位置会显示一个填充圆圈,如上图所示。

现在我们可以调试 PHP 代码了。导航至 Tools | Xdebug | 开始调试(在浏览器中启动)。浏览器窗口将与 Sublime Text 调试会话参数一起打开应用程序。浏览器窗口将处于加载状态,因为一旦到达第一个断点,执行就会停止。浏览器窗口类似于下图:

image 2023 11 05 21 13 04 220

Sublime Text 编辑器中还会打开一些新的小窗口,显示调试信息和所有可用变量,如下截图所示:

image 2023 11 05 21 13 31 132

在前面的截图中,我们的 $a$b$c 数组没有初始化,因为执行光标位于第 22 行,并且已经停止。此外,所有服务器变量、cookie、环境变量、请求数据、POST 和 GET 数据都可以在这里看到。这样,我们就可以调试所有类型的变量、数组和对象,并检查每个变量、对象或数组在某一点上保存了哪些数据。这样,我们就有可能发现那些不进行调试就很难发现的错误。

现在,让我们向前移动执行光标。右键单击编辑器代码部分,转到 Xdebug | Step Into。光标将向前移动,变量数据可能会根据下一行发生变化。如下截图所示:

image 2023 11 05 21 14 23 623

单击 Tools | Xdebug | Stop Debugging 可停止调试。

使用 Eclipse 进行调试

Eclipse 是广泛使用的最免费、功能最强大的集成开发环境。它支持包括 PHP 在内的几乎所有主流编程语言。我们将讨论如何配置 Eclipse 以使用 Xdebug 进行调试。

首先,在 Eclipse 中打开项目。然后,点击工具栏中小虫子图标右侧的向下箭头,如下图所示:

image 2023 11 05 21 16 25 595

之后,单击 “调试配置” 菜单,将打开以下窗口:

image 2023 11 05 21 16 58 228

选择左侧面板上的 PHP Web 应用程序,然后点击左上角的添加新图标。这将添加一个新配置,如上图所示。给配置命名。现在,我们需要在配置中添加一个 PHP 服务器。点击右侧面板上的新建按钮,将打开以下窗口:

image 2023 11 05 21 17 28 729

我们将输入服务器名称 PHP Server。服务器名称可以是任何名称,只要对用户友好并能在以后使用时识别即可。在基础 URL 字段中,输入应用程序的完整 URL。文档根目录应为应用程序根目录的本地路径。输入所有有效数据后,单击 "下一步" 按钮,我们将看到以下窗口:

image 2023 11 05 21 18 04 392

在调试器下拉列表中选择 XDebug,其余字段保持不变。单击 "下一步" 按钮,我们将看到路径映射窗口。将正确的本地路径映射到正确的远程路径非常重要。单击 "添加" 按钮,我们将看到以下窗口:

image 2023 11 05 21 18 50 113

输入远程服务器上应用程序文档根目录的完整路径。然后,选择文件系统中的路径,输入应用程序文档根目录的本地路径。单击确定,然后单击路径映射窗口中的完成按钮。然后,在下一个窗口中单击 "完成",完成添加 PHP 服务器。

现在,我们的配置已经准备就绪。首先,我们要在 PHP 文件中添加一些断点,方法是点击行号栏,这时会出现一个小蓝点,如下图所示。现在,点击工具栏上的小错误图标,选择 "调试为",然后点击 "PHP Web 应用程序"。调试程序将启动,并在浏览器中打开一个窗口。它将处于加载状态,就像我们在 Sublime Text 调试中看到的一样。此外,调试视角也将在 Eclipse 中打开,如图所示:

image 2023 11 05 21 19 36 706

点击右侧栏中的小(X)= 图标,就可以看到所有变量。此外,还可以编辑任何变量数据,甚至是任何数组的元素值、对象属性和 cookie 数据。修改后的数据将保留在当前调试会话中。

要进入下一行,只需按 F5 键,执行光标就会移动到下一行。要跳出下一个断点,我们将按 F6。