配置Xdebug
Xdebug是用于调试PHP的扩展。 尽管您可以使用您选择的IDE,但以下内容将介绍如何将Xdebug和PhpStorm配置为在本地环境中调试。
要启用Xdebug,必须在Git存储库中配置文件、配置IDE并设置端口转发。 您可以在magento.app.yaml
文件中配置某些设置。 编辑后,跨所有入门环境和Pro集成环境推送Git更改以启用Xdebug。 Xdebug在专业暂存和生产环境中已经可用。
配置完毕后,即可调试CLI命令、Web请求和代码。 请记住,所有云基础架构环境都是只读的。 将代码克隆到本地开发环境以执行调试。 对于Pro暂存环境和生产环境,请参阅有关Xdebug的其他说明。
要求
要运行和使用Xdebug,您需要环境的SSH URL。 您可以通过Cloud Console或您的Cloud Onboarding UI查找信息。
配置Xdebug
要配置Xdebug,请执行以下步骤:
分支入门
要添加Xdebug,Adobe建议在开发分支中工作。
在您的环境中启用Xdebug
您可以直接为所有入门环境和Pro集成环境启用Xdebug。 专业生产和暂存环境不需要此配置步骤。 请参阅Debug for Pro Staging and Production。
要为您的项目启用Xdebug,请将xdebug
添加到.magento.app.yaml
文件的runtime:extensions
部分。
启用Xdebug:
-
在本地终端中,在文本编辑器中打开
.magento.app.yaml
文件。 -
在
runtime
部分的extensions
下,添加xdebug
。 例如:code language-yaml runtime: extensions: - redis - xsl - newrelic - sodium - xdebug
-
保存对
.magento.app.yaml
文件所做的更改并退出文本编辑器。 -
添加、提交和推送更改以重新部署环境。
code language-bash git add .magento.app.yaml
code language-bash git commit -m "add xdebug"
code language-bash git push origin <environment-ID>
当部署到入门环境和Pro集成环境时,Xdebug现在可用。 继续配置IDE。 有关PhpStorm,请参阅配置PhpStorm。
配置PhpStorm服务器
必须将PhpStorm IDE配置为正确使用Xdebug。
要将PhpStorm配置为使用Xdebug:
-
在PhpStorm项目中,打开 设置 面板。
- macOS — 选择 PhpStorm > 设置。
- Windows/Linux — 选择 文件 > 设置。
-
在 设置 面板中,展开 PHP 部分并单击 服务器。
-
单击 + 以添加服务器配置。 项目名称在顶部为灰色。
-
[可选]为新服务器配置以下设置。 请参阅 PHPStorm 文档中的未配置调试服务器。
- 名称 — 输入与主机名相同的名称。 此值必须与Debug CLI命令中
PHP_IDE_CONFIG
变量的值匹配,才能使用CLI进行调试。 - 主机 — 输入主机名。
- 端口 — 输入
443
。 - 调试器 — 选择
Xdebug
。
- 名称 — 输入与主机名相同的名称。 此值必须与Debug CLI命令中
-
选择 使用路径映射。 在 文件/目录 窗格中,显示
serverName
的项目的根目录。 -
在服务器 上的 绝对路径列中,单击 编辑 图标并根据环境添加设置。
-
对于所有Starter环境和Pro集成环境,远程路径为
/app
。 -
对于Pro暂存和生产环境:
- 生产:
/app/<project_code>/
- 暂存:
/app/<project_code>_stg/
- 生产:
-
-
将Xdebug端口更改为
9000,9003
,或者可以在 PHP > 调试 > Xdebug > 调试端口 面板中将其限制为仅9000
。 -
单击 应用。
创建PHPStorm运行/调试配置
这使应用程序能够拥有正确的调试设置以处理来自Adobe Commerce应用程序的请求。
-
打开PHPStorm应用程序,然后单击屏幕右上角的 Add Configuration。
-
单击 Add new run configuration。
-
选择 PHP Remote Debug 选项。
- 输入唯一但可识别的名称。
- 选中Filter debug connection by IDE key**复选框。
- 选择您在上一节中创建的服务器。 如果尚未创建,可以立即创建一个,但请参阅设置指南的这一部分。
- 在 IDE key(session id) 文本字段中,输入大写字母中的
PHPSTORM
。 我们将在设置的其他部分使用此功能,因此保持不变非常重要。 如果选择其他字符串,则必须记得在设置和配置过程的其他位置使用它。
-
单击 Apply > OK。
设置端口转发
将XDEBUG
连接从服务器映射到本地系统。 要执行任何类型的调试,必须将端口9000从云基础架构服务器上的Adobe Commerce转发到本地计算机。 请参阅以下部分之一:
Mac或UNIX上的端口转发®
要在Mac或UNIX®环境中设置端口转发,请执行以下操作:
-
打开终端。
-
使用SSH建立连接。
code language-bash ssh -R 9000:localhost:9000 <ssh url>
使用
-v
(verbose)选项,以便每当套接字连接到要转发的端口时,它都会显示在终端中。如果显示“无法连接”或“无法侦听远程端口”错误,则可能是另一个活动的SSH会话持续存在于占用端口9000的服务器上。 如果未使用该连接,则可以终止该连接。
要对连接进行故障排除:
-
使用SSH登录到远程集成、暂存或生产环境。
-
查看SSH会话列表:
who
-
按用户查看现有SSH会话。 注意不要影响除您自己以外的用户!
- 集成:用户名与
dd2q5ct7mhgus
类似 - 暂存:用户名类似于
dd2q5ct7mhgus_stg
- 生产:用户名类似于
dd2q5ct7mhgus
- 集成:用户名与
-
对于早于您的用户会话,请查找伪终端(PTS)值,如
pts/0
。 -
终止与PTS值对应的进程ID (PID)。
code language-bash ps aux | grep ssh kill <PID>
示例响应:
code language-none dd2q5ct7mhgus 5504 0.0 0.0 82612 3664 ? S 18:45 0:00 sshd: dd2q5ct7mhgus@pts/0
要终止连接,请输入带有进程ID (PID)的kill命令。
code language-bash kill 3664
Windows上的端口转发
要在Windows上设置端口转发(SSH隧道),必须配置Windows终端应用程序。 此示例逐步说明如何使用Putty创建SSH通道。 您可以使用Cygwin等其他应用程序。 有关其他应用程序的更多信息,请参阅随这些应用程序提供的供应商文档。
要使用Putty在Windows上设置SSH通道:
-
如果您尚未这样做,请下载Putty。
-
启动Putty。
-
在类别窗格中,单击 会话。
-
输入以下信息:
- 主机名(或IP地址) 字段:输入云服务器的SSH URL
- 端口 字段:输入
22
-
在 类别 窗格中,单击 连接 > SSH > 隧道。
-
输入以下信息:
- Source端口 字段:输入
9000
- 目标 字段:输入
127.0.0.1:9000
- 单击 远程
- Source端口 字段:输入
-
单击 添加。
-
在 类别 窗格中,单击 会话。
-
在 保存的会话 字段中,输入此SSH通道的名称。
-
单击 保存。
-
要测试SSH通道,请单击 加载,然后单击 打开。
如果显示“无法连接”错误,请验证以下各项:
- 所有Putty设置均正确
- 您在云基础架构上的专用Adobe Commerce SSH密钥所在的计算机上运行Putty
通过SSH访问Xdebug环境
要启动调试、执行设置等,您需要SSH命令来访问环境。 您可以通过Cloud Console和项目电子表格获取此信息。
对于入门级环境和Pro集成环境,您可以使用以下magento-cloud
CLI命令以通过SSH连接到这些环境:
magento-cloud environment:ssh --pipe -e <environment-ID>
要使用Xdebug,请按如下方式通过SSH连接到环境:
ssh -R <xdebug listen port>:<host>:<xdebug listen port> <SSH-URL>
例如,
ssh -R 9000:localhost:9000 pwga8A0bhuk7o-mybranch@ssh.us.magentosite.cloud
调试Pro暂存和生产环境
要专门在Pro计划暂存和生产环境中使用Xdebug,请创建单独的SSH通道和Web会话,只有您才有权访问。 此用法不同于典型访问,它仅向您提供访问权限,并不向所有用户提供访问权限。
您需要以下各项:
-
SSH命令用于访问环境。 您可以通过Cloud Console或您的Cloud Onboarding UI获取此信息。
-
配置暂存和Pro环境时设置的
xdebug_key
值。通过使用SSH登录到主节点并执行:
xdebug_key
code language-bash cat /etc/platform/*/nginx.conf | grep xdebug.sock | head -n1
要设置到暂存或生产环境的SSH通道:
-
打开终端。
-
清理集群中每个Web节点的所有SSH会话。
code language-bash ssh USERNAME@CLUSTER.ent.magento.cloud 'rm /run/platform/USERNAME/xdebug.sock'
-
为群集的每个Web节点设置Xdebug的SSH通道。
code language-bash ssh -R /run/platform/USERNAME/xdebug.sock:localhost:9000 -N USERNAME@CLUSTER.ent.magento.cloud
USERNAME@CLUSTER.ent.magento.cloud
的正确值,请执行以下操作:- 方法1: magento-cloud CLI:
magento-cloud ssh --all
- 方法2: Commerce Console: https://CONSOLE-URL/ENVIRONMENT,单击
SSH v
下拉列表
要使用环境URL 开始调试:
演示了用于启动远程GET会话的配置,以及调试参数。
-
启用远程调试;访问浏览器中的站点,并将以下内容附加到URL中,
KEY
为xdebug_key
的值。code language-http ?XDEBUG_SESSION_START=KEY
此步骤设置发送浏览器请求以触发Xdebug的Cookie。
-
使用Xdebug完成调试。
-
准备好结束会话后,使用以下命令删除Cookie并结束通过浏览器进行的调试,其中
KEY
为xdebug_key
的值。code language-http ?XDEBUG_SESSION_STOP=KEY
note note NOTE 不支持 POST
请求传递的XDEBUG_SESSION_START
。
调试CLI命令
本节介绍如何调试CLI命令。
要调试CLI命令:
-
通过SSH连接到要使用CLI命令调试的服务器。
-
创建以下环境变量:
code language-bash export XDEBUG_CONFIG='PHPSTORM'
code language-bash export PHP_IDE_CONFIG="serverName=<name of the server that is configured in PHPSTORM>"
这些变量将在SSH会话结束时删除。
-
开始调试
在入门环境和Pro集成环境中,运行CLI命令进行调试。
您可以添加运行时选项,例如:code language-bash php -d xdebug.profiler_enable=On -d xdebug.max_nesting_level=9999 bin/magento cache:clean
在Pro暂存和生产环境中,在调试CLI命令时,必须指定到Xdebug PHP配置文件的路径,例如:
code language-bash php -c /etc/platform/USERNAME/php.xdebug.ini bin/magento cache:clean
调试Web请求
以下步骤可帮助您调试Web请求。
-
在 扩展 菜单中,单击 调试 以启用。
-
右键单击,选择选项菜单,然后将IDE键设置为 PHPSTORM。
-
在浏览器上安装Xdebug客户端。 配置并启用它。
示例:Chrome设置
本节讨论如何使用Xdebug帮助程序扩展在Chrome中使用Xdebug。 有关适用于其他浏览器的Xdebug工具的信息,请参阅浏览器文档。
要将Xdebug帮助程序与Chrome 一起使用:
-
创建到云服务器的SSH通道。
-
从Chrome应用商店安装Xdebug Helper扩展。
-
在Chrome中启用该扩展,如下图所示。
-
在Chrome中,右键单击Chrome工具栏中的绿色帮助程序图标。
-
从弹出菜单中,单击 选项。
-
从 IDE密钥 列表中,单击 PhpStorm。
-
单击 保存。
-
打开PhpStorm项目。
-
在顶部导航栏中,单击 开始收听 图标。
如果未显示导航栏,请单击 查看 > 导航栏。
-
在PhpStorm导航窗格中,双击PHP文件进行测试。
调试本地代码
由于环境是只读的,因此您必须从环境或特定Git分支将代码拉到本地工作站才能执行调试。
您选择的方法由您决定。 您可以选择以下选项:
-
从Git中签出代码并运行
composer install
除非
composer.json
引用您无权访问的专用存储库中的包,否则此方法有效。 此方法可获取整个Adobe Commerce代码库。 -
复制
vendor
、app
、pub
、lib
和setup
目录此方法可使您拥有所有可以测试的代码。 根据您拥有的静态资产数量,这可能会导致传输时间较长,并包含大量文件。
-
仅复制
vendor
目录由于大多数代码位于
vendor
目录中,此方法可能会产生良好的测试,但不会测试整个代码库。
要压缩文件并将它们复制到本地计算机:
-
使用SSH登录到远程环境。
-
压缩文件。
code language-bash tar -czf /tmp/<file-name>.tgz <directory list>
例如,要仅压缩
vendor
目录:code language-bash tar -czf /tmp/vendor.tgz vendor
-
在本地环境中,使用PhpStorm压缩文件。
code language-bash cd <phpstorm project root dir>
code language-bash rsync <SSH-URL>:/tmp/<file-name>.tgz .
code language-bash tar xzf <file-name>.tgz