资讯详情

PHPStorm 2021.1 配置 Xdebug 调试

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.4Thread Safety:disabled 。这两个信息决定了我们 Xdebug 下载版,PHP更不用说版本了,请自己分辨64或32的问题,主要是 Thread Safetydisabled 就选择 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 进行调试。

标签: 扭矩传感器nts

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台