一、Xdebug 介绍
Xdebug 是 PHP 的一个扩展,提供了多种功能以改善 PHP 开发体验。
- 单步调试:在脚本执行时于集成开发环境(IDE)或编辑器中逐行调试代码的一种方式。
- PHP 错误报告的改进:改进的 var_dump() 函数,针对提示、警告、错误和异常提供堆栈跟踪,以突出显示导致错误的代码路径。
- 跟踪:将每个函数调用(包括参数和调用位置)写入磁盘。还包括每个函数中的变量赋值和返回值。资料收集借助可视化工具,让您能够分析 PHP 应用程序的性能并找出瓶颈。
- 代码覆盖率分析:用于展示在使用 PHPUnit 运行单元测试时,您的代码库中哪些部分被执行。
二、安装 Xdebug
1、使用 phpinfo() 输出本地安装的 PHP 信息
2、复制 phpinfo() 中的所有内容,放入下图文本框中获取合适版本的Xdebug。(下图地址:https://xdebug.org/wizard)
3、点击【Analyse my phpinfo() output】按钮后出现下图内容,根据下图中步骤进行安装。
4、在对应PHP版本的 php.ini 文件底部添加以下配置内容:
[xdebug] xdebug.idekey="PHPSTORM" zend_extension="自己php的目录\ext\php_xdebug.dll" xdebug.mode=debug xdebug.client_host=127.0.0.1 xdebug.client_port=9111 xdebug.log="自己的日志目录\tmp\xdebug.log" xdebug.start_with_request=yes
三、配置 PhpStorm 使用 Xdebug
1、打开phpstorm -> fiel -> settings
2、选择 PHP 后如下图操作
3、选择对应的PHP版本和之前下载的Xdebug
4、在设置页面选择Debug【 phpstorm -> fiel -> settings -> PHP -> Debug 】进行配置:
5、配置 IDE key,如下图:
6、配置服务器路径映射【 phpstorm -> fiel -> settings -> PHP -> Servers 】
四、开始调试
1、调试方法:
- 启动监听
在 PhpStorm 的右上角,点击电话图标 (Start Listening for PHP Debug Connections),让它变成按下状态。
- 设置断点
在你的代码中,行号旁边点击一下,设置一个断点(会出现一个红点)。
- 触发调试
有两种常用方式让 Xdebug 连接到 PhpStorm:
-
- 方法A:使用浏览器扩展(最简单)
安装 Xdebug Helper 浏览器扩展(支持 Chrome, Firefox, Edge)。
在浏览器中打开你的项目页面。
点击浏览器工具栏中的 Xdebug Helper 图标,选择 Debug,图标会变成绿色。
刷新页面。PhpStorm 会自动捕获到调试连接,并弹出调试窗口,停在你的断点处。
-
- 方法B:使用 URL 参数或 Cookie
在你要调试的页面 URL 后加上参数 ?XDEBUG_SESSION_START=PHPSTORM。
或者,使用开发者工具(F12)设置一个名为 XDEBUG_SESSION,值为 PHPSTORM 的 Cookie。
然后访问该 URL。同样会触发调试。
- 在 PhpStorm 中调试
一旦触发成功,PhpStorm 会变为调试视图,你可以:
- 查看变量:在 Variables 窗口查看所有变量值。
- 步进调试:使用 Step Over (F8), Step Into (F7), Step Out (Shift+F8) 等按钮控制执行流程。
- 查看调用栈:查看函数调用链。
- 计算表达式:动态计算某个表达式的值。
2、主要快捷键:
快捷键 | 名称 | 作用 |
---|---|---|
|
Step Over | 单步跳过。执行当前行代码,如果该行调用了函数或方法,不会进入其内部,而是将其作为一个整体执行完,然后跳到下一行。用于快速穿越你不关心的函数。 |
|
Step Into | 单步进入。执行当前行代码,如果该行有函数或方法调用,会进入该函数或方法的内部。这是分析逻辑细节最常用的操作。 |
Alt+Shift+F7 | Force Step Into | 强制单步进入。即使是被调用的函数是 PHP 内置函数(如 array_map )或者 Composer 依赖库中的函数,也会强制进入。普通 Step Into 会跳过这些。 |
|
Step Out | 单步跳出。当你进入一个函数内部后,使用此操作会直接执行完当前函数的剩余所有代码,并返回到调用这个函数的位置。当你误入一个复杂函数或快速看完核心逻辑后想离开时非常有用。 |
|
Run to Cursor | 运行到光标处。让代码一直执行,直到到达你光标所在的那一行。这比设置多个断点再依次跳过更高效。 |
F9 | Resume Program | 恢复程序。让代码继续正常运行,直到遇到下一个断点或脚本结束。 |
|
Stop | 停止。终止当前的调试会话。 |