Reference
- 使用 PHPStorm 进行调试(PHPStorm 官方手册 2021.1版本)
- Xdebug 下载安装指南(官网地址)
- Xdebug 下载地址
- Xdebug 配置相关
环境
PHPStorm 2021.1.4
PHP 7.3.4
Xdebug 3.1.5
配置步骤
<?php echo phpinfo();
PS:所有隐藏一些不必要的信息,所有的文件路径都将根目录写入目录 ..
不要忘记改变你自己的格式
①关注两个信息:PHP Version: 7.3.4
、Thread Safety:disabled
。这两个信息决定了我们 Xdebug
下载版,PHP更不用说版本了,请自己分辨64或32的问题,主要是 Thread Safety
为 disabled
就选择 NTS
版本,enabled
就选择 TS
版本。这里的版本对应起来很重要!!!这里有一个奇淫技巧,可以直接使用 phpinfo()
将打印好的网页源码放入 xdebug 网站 上去分析对应的 xdebug
版本。
②将下载的 php_xdebug-3.1.5-7.3-vc15-nts-x86_64.dll
移动到对应的文件PHP在版本扩展目录下 ..\php\php7.3.4nts\ext
。
③编辑 ..\php\php7.3.4nts\php.ini
文件拉到底部,新增 zend_extension=xdebug-3.1.5-7.3-vc15-nts-x86_64
这里可以关注几个信息(只关注,不一定需要改)
- PHP扩展目录地址
extension_dir="..\php\php7.3.4nts\ext"
是否和放置 Xdebug dll 文件地址一致 - 可以看到
ini
文件中引入扩展的方法是extension=curl
形式(前面没有注释);
),以扩展文件命名php_curl.dll
,因此,我们可能会了解扩展文件的具体介绍方法 Xdebug 也就是添加zend_extension=xdebug-3.1.5-7.3-vc15-nts-x86_64
,至于为什么zend_extension
而不是extension
是因为 Xdebug 是基于 zend 而不是引擎 PHP 发动机扩展。
最后我在 php.ini
添加以下配置:
;Xdebug 相关配置 [xdebug] # 这里是放置到 ext 我在这里更改了扩展文件名,不改的话就是 # xdebug-3.1.5-7.3-vc15-nts-x86_64 zend_extension=xdebug-3.1.5 xdebug.client_host=localhost ;默认是9003 xdebug.client_port=9100 xdebug.mode=debug ;日志的配置非常重要 这决定了你在遇到问题时在哪里找到答案 xdebug.log=..\php\xdebug.log
④查看 Xdebug 是否成功 安装
-
命令行方式
$> php -v PHP 7.3.4 (cli) (built: Apr 2 2019 21:57:22) ( NTS MSVC15 (Visual C 2017) x64 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies with Xdebug v3.1.5, Copyright (c) 2002-2020, by Derick Rethans # 可以看到 Xdebug 扩展已成功加载
echo phpinfo();
直接查看有没有 Xdebug 相关的信息,注意要重启 Nginx 服务
⑤ PHPStorm 配置 设置->PHP->CLI 解释器
设置为对应的解释器, 这里是 ..\php\php7.3.4nts\php.exe
。设置->PHP->调试->Xdebug:调试端口
设置为和上面的 xdebug.client_port
一致即可,值得注意的是在 设置->PHP->调试->预调试
处,你是可以验证 xdebug 调试是否可以在 PHPstorm 中正常运行的。
避坑
①如果你是使用的接口进行测试/部署的,那么请在更改 php.ini
文件后务必重启 Nginx 服务以更新PHP配置,至于为什么请自行了解PHP和Nginx是怎么交互的。
②可能会出现端口被占用的情况,例如 9000 is too busy
之类的情况,这时候更改一下 xdebug.client_port
的值是一个很好的选择。
③可能会遇到一切都配置无误,但是打断点后没有反应的情况,此时就是日志起作用的时候了:
[13716] Log opened at 2022-06-12 12:59:50.547344
[13716] [Config] INFO: Trigger value for 'XDEBUG_TRIGGER' not found, falling back to 'XDEBUG_SESSION'
[13716] [Config] INFO: Trigger value for 'XDEBUG_SESSION' not found, so not activating
[13716] Log closed at 2022-06-12 12:59:50.799754
出现这个问题是因为我们配置的 xdebug.mode=debug
是 debug 模式。查看 Xdebug 配置:start_with_request 关于 xdebug.start_with_request
的介绍可以发现,当 xdebug.mode=debug
时,xdebug.start_with_request=trigger
, 而 trigger
仅在请求开始时存在特定触发器时才被激活。因此此时需要设置 xdebug.start_with_request=yes
进行调试。