PHP 文件使用 Xdebug
xdebug 调试单文件
假如有如下 PHP 文件:
<?php
function getMessage(string $name, int $step): string
{
if ($step === 1) {
$message = "At step1";
} else if ($step === 2) {
$message = 'At step2';
} else {
$message = 'woo, unknown current step';
}
return "$name: $message";
}
$result = getMessage("Curder", 1);
如何追踪 PHP 在运行过程中变量的赋值情况,一种情况可以通过打印 $result
变量的结果,比如使用 var_dump($result);
如果使用的是 Laravel 项目也可以使用 dd($result);
,然后在浏览器中查看结果。
然而上面的情况我们可以很方便的在 xdebug 中追踪逻辑在运行过程中变量的赋值情况。
PhpStorm 支持直接使用 Xdebug 调试 PHP 文件,但是需要有如下前置需求:
下载与 PHP 版本兼容的 Xdebug 扩展,并按照安装指南中的说明进行安装,可以参考这里给 PHP 安装好 Xdebug 扩展
在 PhpStorm 中配置 Xdebug
以下配置的流程来自 PhpStorm 官方帮助文档,可以在官方文档查看更多详情。
- 使用快捷键
⌘ + ,
,打开IDE
设置并选择 PHP。 - 检查与所选 PHP 解释器关联的 Xdebug 安装:
- 在 PHP 页面上,从
CLI Interpreter
列表中选择相关的 PHP 安装,然后单击...
。该列表显示了 PhpStorm 中可用的所有 PHP 安装。 - 打开的 CLI 解释器对话框显示以下内容:
- 所选 PHP 安装的版本。
- 与所选 PHP 安装(Xdebug 或 Zend Debugger)关联的调试引擎的名称和版本。如果没有配置调试器,PhpStorm 会显示相应的消息:
- 在 PHP 页面上,从
开始调试 PHP 文件
当 PHP 配置好 Xdebug,并且在 PhpStorm 中正确设置后就可以对 .php
文件进行调试。
来到主菜单栏 Run
-> Debug 'index.php'
(或者直接使用快捷键 Control(或 Ctrl)⌃ + D
)就可以对当前文件进行调试,但是执行完之后发现代码并没有按预期,脚本执行完直接退出了。
出现这个问题的原因是并未设置断点,xdebug并不知道从哪儿截断程序的执行,自然就一直执行到脚本执行完毕才退出。
设置完断点后再执行快捷键 Control(或者 Ctrl)⌃ + D
就可以看到如下调试界面: 1. Show Execution Point
查看当前断点所在位置 2. Step Over
跳过当前代码行并带您到下一行,即使突出显示的行中有方法调用。方法的实现被跳过,直接进入调用者方法的下一行。 3. Step Into
进入该方法以显示其中发生的事情。当您不确定该方法是否返回正确的结果时,请使用此选项。 4. Force Step Into
方法中的步骤,即使此方法被常规 Step Into
跳过。 5. Step Out
跳出当前方法到调用者方法。 6. Run to Cursor
继续执行,直到到达插入符号的位置。途中的所有断点都将被忽略。
Tips: 在 xdeug 调试过的步骤中,当我们将鼠标光标悬浮在变量名上,可以看到对应变量运行时的值。
添加变量监听
当调试的项目相对复杂时,会需要单独观察一些变量,可以将它们添加到 Watches Lists
开启 Separate Watches
- 点击右侧的
Layout Settings
布局设置按钮 - 点击
Separate Watches
选项,开启Separate Watches
点击切换截图展示与隐藏
使用下面的示例流程开启
Separate Watches
下图为开启
Separate Watches
后的面板
添加监听的变量
- 可以通过在输入框添加要监听的变量名,并点击右侧的
+
按钮或使用快捷键Command + Shift + Enter
添加。 - 也可以点击面板左侧的
+
按钮在随后新增的输入框中输入要监听的变量名并按回车 Enter 确认输入。
这样方便在众多变量中筛选出关心的变量进行监听查看。