如何使用 DDEV 上的 Xdebug 和 PhpStorm 逐步调试 PHP 代码
什么是调试?
根据维基百科: “在计算机编程和软件开发中,调试是查找和解决程序、软件或系统中的错误(阻止正常运行的缺陷或问题)的过程。”
根据互联网: “调试就像在一部犯罪电影中扮演侦探,而你同时也是凶手。” – Filipe Fortes
什么是 DDEV?
DDEV 是一个开源工具,允许使用 docker 快速设置本地站点。而且,你不需要了解太多关于 docker 的知识就可以使用它,只需要安装它即可。有关获取 DDEV 以及运行 WordPress 或 Drupal 项目的命令列表,请参阅 ttps://davidloor.com/2021/12/22/how-to-setup-a-wordpress-and-drupal-local-site-with-ddev/
什么是 Xdebug?
Xdebug,根据官方网站的说法,“是 PHP 的一个扩展,提供了一系列功能来改善 PHP 开发体验”。
Xdebug 提供的一个功能是逐步调试,其中 Xdebug 使用 DBGp 协议与 IDE 进行交互。PhpStorm、Sublime、Netbeans、Visual Studio Code 等知名 IDE 都支持它。通过逐步调试,程序员可以在 PHP 脚本的任何一行设置断点,在需要停止执行的地方查看该特定点的程序状态和行为。
当我们有 error_log、print_r、var_dump 等我们都用了很多的函数时,为什么还要费力使用像 xDebug 这样的工具呢?因为 xDebug 会让你成为一个更快的编码者和 bug 修复者。
假设你需要调试一个 PHP 文件,根据服务器错误日志,你几乎可以肯定其中存在一个 bug,只需使用 error_log、print_r 等函数。你需要开始调用这些函数,传递你想要输出的变量,并在浏览器中刷新页面以检查输出,如果变量没有提供你修复问题所需的信息,你将需要用一组不同的变量重复此过程,直到获得可能有助于修复 bug 的信息。而且,正如我们所知,这个过程非常耗时。
要使用 xdebug 调试上述假设的同一个 bug,在 PHP 脚本中,你需要将断点设置在你想要查看程序状态的行上,然后刷新浏览器。你将能够看到请求期间作用域内的所有变量,正如你在以下屏幕截图中看到的那样,只需一次交互。

安装和启用 xDebug
- 使用 DDEV 时,Xdebug 已安装。
- 要在 DDEV 项目中启用 Xdebug,只需在终端中运行 ddev xdebug on
- 你应该会看到 Enabled xdebug 作为输出
在 PhpStorm 中开始监听 PHP 调试连接
- 在 PhpStorm 中打开你的 PHP 项目
- 在 PhpStorm 的右上角,你会找到一个小的电话按钮,点击它开始监听 PHP 调试连接。

- 在浏览器中打开你的本地站点,然后在 PhpStorm 中,系统会提示你接受来自 Xdebug 的传入连接,你应该点击“接受”。

最后的想法
Xdebug 只是另一个可用于查找和解决 PHP 代码中错误的工具。在许多情况下,它可以帮助提高 PHP 开发人员的生产力。
PhpStorm 也是另一个工具,它具有出色的 PHP 开发功能。我是在听说了它给我的同事带来的所有好处后,在两年前开始使用它的。十多年来,我一直是 Apache Netbeans 的忠实用户,它与 Xdebug 配合也很好,但要使其完全正常工作需要一些额外的步骤,而且它过去占用了我计算机的太多资源,导致我的计算机变得非常慢。
我们应该记住,“你和你使用的工具一样好。”