使用 PhpStorm 进行调试

为深入了解 PhpStorm 细致的调试世界奠定坚实基础。在本集中,你将了解如何使用 Xdebug 启动调试会话、设置断点,以及步过或步入代码。

转写文稿

PhpStorm 最强大的功能之一就是调试器。“调试器”这个名字可以追溯到 20 世纪 40 年代,字面意思是“从程序中移除 bug 或故障的东西”。调试器可以让你在执行代码时暂停代码,从而检查程序的内存、跟踪代码采用的路径等。调试器的目标是帮助你更轻松地找出问题所在并从代码中移除 bug。

PhpStorm 内置了一个轻量级调试器,但目前最流行的 PHP 调试器 Xdebug 需要单独安装。好在 PhpStorm 可以为你执行安装。那么,我们就来看看如何使用 PhpStorm 设置 Xdebug 和开始调试。

假设你没有安装 Xdebug。当你开始调试 PHP 脚本,例如测试时,会是什么情况?你可以按 Debug 按钮,而不是正常运行测试。这样,PhpStorm 会让我们知道调试器没有安装,但它也可以帮你解决这个问题。只需按 Update Interpreter Info,然后按 Download and install Xdebug extension,IDE 就会为你设置 Xdebug。

完成后,PhpStorm 将启用调试器,自动重新运行测试。但是,什么也不会发生。这是因为我们还没有告诉调试器在任何位置暂停。为此,我们需要使用一种叫做“断点”的东西。

断点是代码中的一个位置,调试器会在这个位置暂停执行,让你检查发生了什么。

例如,我们在这个行添加一个断点。点击装订区域中的行号即可。现在,我们重新运行测试。

这一次,你会注意到一些变化。程序暂停,PhpStorm 显示了许多信息。

在左侧,你可以看到到达这个断点之前发生的一切。我们是通过这些方法调用到达这里的。你可以点击它们,PhpStorm 会显示文件的路径。

在右侧,你可以看到断点处当前可用的所有变量。有一个引用测试类的 $this 变量,你可以打开它看看里面有什么。然后,还有其他变量,例如全局 $_ENV 变量。PhpStorm 将显示它的内容,你可以看到每当我们移动到先前的一个方法调用时,变量列表如何变化。

现在,调试器在我们的程序流中向后移动,如果你需要知道先前发生的事情,这将非常有用。但向前移动呢?

你可以按 Resume 按钮取消暂停调试器,但这样测试就会结束。

我们回到断点,不按 Resume,而是按 Step over 或者 Step into 按钮。这两个功能非常强大。

“步过”表示调试器将移动到下一条语句并再次暂停。“步入”表示调试器将更深入一层,调试函数调用中发生的情况。

现在,这两个按钮结合在一起,功能超级强大。你可以用它们来浏览程序流,同时关注变量如何变化、条件匹配或不匹配的原因、循环的次数等。

不过,调试虽然强大,但也令人生畏。要处理的东西很多,如果没有上下文很难给出合理的例子。这也需要多加练习才能适应,就像演奏乐器一样。

好了,以上就是今天的内容。我介绍了调试器的基本入门知识:如何启动调试会话、设置断点,以及步过和步入代码。你需要适应它,而唯一的方法就是练习。下一次编写 var_dumpdd 语句时,试一试使用调试器。第一次使用可能会遇到一些麻烦,但随着时间的推移会越来越简单,并且长远来看会带来回报。