PhpStorm 2021.3 Help

配置 Xdebug

下载 Xdebug

  • 下载与您的 PHP 版本兼容的Xdebug 扩展,并按照安装指南中的说明进行安装。

    如果您使用的是AMP 包,则可能已经安装了 Xdebug 扩展。请参阅特定于您的包裹的说明。

将 Xdebug 与 PHP 解释器集成

  1. 在编辑器中打开活动的php.ini文件:

    1. 在“设置/首选项”对话框 ( Ctrl+Alt+S) 中,单击PHP

    2. 在打开的PHP页面上,单击CLI Interpreter字段浏览按钮旁边的。

    3. 在打开的CLI 解释器对话框中,配置文件只读字段显示活动php.ini文件的路径。单击在编辑器中打开

  2. 要禁用阻止 Xdebug 的Zend DebuggerZend Optimizer工具,请删除或注释掉php.ini文件中的以下行:

    zend_extension=<path_to_zend_debugger> zend_extension=<path_to_zend_optimizer>
  3. 要启用 Xdebug,请在php.ini[xdebug]文件中找到或创建该部分并按如下方式更新它:

    [xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.mode=debug xdebug.client_host=127.0.0.1 xdebug.client_port="<Xdebug 连接的端口(默认为9003)>"
    [xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.remote_enable=1 xdebug.remote_host=127.0.0.1 xdebug.remote_port="<Xdebug 连接的端口(默认为9000)>"

    要通过 Xdebug proxies 启用多用户调试,请找到xdebug.idekey设置并为其指定一个您选择的值。此值将用于在 Xdebug 代理服务器上注册您的 IDE。

  4. 保存并关闭php.ini文件。

  5. 通过执行以下任一操作来验证 Xdebug 安装:

    • 在命令行中,运行以下命令:

      php --版本

      输出应该在已安装的扩展中列出Xdebug :

      安装了 Xdebug 扩展
    • 创建一个包含以下代码的php文件:

      <?php phpinfo();

      在浏览器中打开文件。phpinfo输出应包含 Xdebug 部分:

      启用 Xdebug 支持

在 PhpStorm 中配置 Xdebug

  1. Ctrl+Alt+S打开 IDE 设置并选择PHP

  2. 检查与所选 PHP 解释器关联的Xdebug安装:

    1. PHP页面上,从CLI Interpreter列表中选择相关的 PHP 安装,然后单击浏览按钮字段旁边的。该列表显示了 PhpStorm 中可用的所有 PHP 安装,请参阅配置本地 PHP 解释器配置远程 PHP 解释器

    2. 打开的CLI 解释器对话框显示以下内容:

      • 所选 PHP 安装的版本。

      • 与所选 PHP 安装(Xdebug 或 Zend Debugger)关联的调试引擎的名称和版本。如果没有配置调试器,PhpStorm 会显示相应的消息:

        ps_interpreters_debugger_not_installed.png

    或者,打开安装向导,粘贴 的输出phpinfo(),然后单击分析我的 phpinfo() 输出在验证调试引擎的配置中了解有关检查Xdebug安装的更多信息。

  3. 定义 Xdebug 行为。单击PHP节点下的调试。在打开的调试页面上,在Xdebug区域中指定以下设置:

    • Debug port字段中,指定工具将通过其与 PhpStorm 通信的端口。

      这必须与php.ini文件中指定的端口号相同:

      xdebug.client_port="<Xdebug 连接的端口(默认为 9003)>"
      xdebug.remote_port="<Xdebug 连接的端口(默认为 9000)>"

      默认情况下,Xdebug 2 监听端口9000。对于Xdebug 3,默认端口已从9000更改为9003。您可以通过用逗号分隔多个端口来指定它们。默认情况下,调试端口值设置为9001,9003以让 PhpStorm 同时监听两个端口。

    • 要让 PhpStorm 通过调试端口字段中指定的端口接受来自 Xdebug 引擎的任何传入连接,请选中可以接受外部连接复选框。

    • 选中未指定路径映射时在第一行强制中断复选框,以使调试器在到达并打开未映射到服务器页面上项目中任何文件的文件时立即停止。调试器在此文件的第一行停止,并且检查/更新变量显示以下错误消息:在服务器上找不到文件的本地副本 <服务器上文件的路径>和链接单击以设置映射。单击该链接以打开“解决路径映射问题”对话框并将问题文件映射到其本地副本。

      清除此复选框后,调试器不会在到达并打开未映射的文件时停止,文件只是被处理,并且不显示错误消息。

    • 选中当脚本位于项目之外时在第一行强制中断复选框,以使调试器在到达并打开当前项目之外的文件时立即停止在第一行。清除此复选框后,调试器将继续打开当前项目之外的文件。

  4. 在“外部连接”区域中,指定您希望 PhpStorm 如何处理从主机接收的连接以及通过未注册为部署服务器配置的端口接收的连接。

    • 通过未注册的服务器配置忽略外部连接:选中此复选框可让 PhpStorm 忽略从主机和未注册为部署服务器配置的端口接收的连接。选中此复选框后,PhpStorm 不会尝试自动创建部署服务器配置。

    • Break at first line in PHP scripts : 选中此复选框可在调试器与 PhpStorm 之间的连接建立后立即停止(而不是在到达第一个断点之前自动运行)。或者打开运行 | 在主菜单中的 PHP 脚本选项中的第一行中断。

    • 最大限度。同时连接使用此旋转框来限制可以同时处理的外部连接的数量。

配置 Xdebug 以在按需模式下使用

PhpStorm 支持按需模式,您可以在其中为全局 PHP 安装禁用 Xdebug,并仅在调试命令行脚本或需要代码覆盖率报告时按需自动启用它。这让您的命令行脚本(包括 Composer 和单元测试)运行得更快。

  1. 禁用命令行脚本的 Xdebug:

    1. 设置/首选项对话框 ( Ctrl+Alt+S) 中,转到PHP

    2. PHP 可执行文件列表中,选择相关的 PHP 解释器并单击浏览按钮它旁边的。在打开的CLI 解释器对话框中,单击配置文件旁边的在编辑器中打开链接:<path to php.ini>文件。关闭所有对话框并切换到打开php.ini文件的选项卡。

    3. php.ini文件中,找到该[xdebug]部分并通过添加;介词在其中注释以下行:

      ;[xdebug] ;zend_extension = "<xdebug 扩展的路径>"
    4. 打开CLI Interpreters对话框并单击PHP 可执行文件字段重新加载按钮旁边的。PhpStorm 通知您未安装调试器:

      ps_interpreters_debugger_not_installed.png
  2. 要使 PhpStorm 在必要时激活 Xdebug ,请在Additional区域的Debugger extension字段中指定它的路径。手动键入路径或单击并在打开的对话框中选择位置。浏览按钮

配置 Xdebug 以在 Just-In-Time 模式下使用

PhpStorm 支持在Just-In-Time (JIT)模式下使用 Xdebug,因此它不会一直附加到您的代码,而是仅在发生错误或抛出异常时才连接到 PhpStorm。根据使用的 Xdebug 版本,此操作模式通过以下设置切换:

该模式可用于调试命令行脚本和 Web 服务器调试。

根据您是要调试命令行脚本还是使用 Web 服务器,请使用以下方案之一。

命令行脚本

对于调试命令行脚本,指定自定义-dxdebug.remote_mode=jit(对于 Xdebug 2)或-dxdebug.start_upon_error=yes(对于 Xdebug 3)指令作为附加配置选项

  1. Ctrl+Alt+S打开 IDE 设置并选择PHP

  2. PHP 可执行文件列表中,选择相关的 PHP 解释器并单击浏览按钮它旁边的。

  3. 在打开的CLI 解释器对话框中,单击附加区域中配置选项字段浏览按钮旁边的。

  4. 在打开的配置选项对话框中,单击添加按钮以添加新条目。

    xdebug.start_upon_error配置指令字段和yes字段中键入。

    xdebug.remote_mode配置指令字段和jit字段中键入。

    当您单击OK时,您将返回到CLI Interpreters对话框,其中显示配置选项字段-dxdebug.remote_mode=jit(对于 Xdebug 2)或-dxdebug.start_upon_error=yes(对于 Xdebug 3)。

Web服务器调试

  1. 从主菜单中,选择运行 | Web 服务器调试验证

  2. 在打开的验证远程环境中,选择要验证调试器的 Web 服务器。

    • 选择本地 Web 服务器或共享文件夹以检查与本地 Web 服务器关联的调试器。

      • 创建验证脚本的路径:在此字段中,指定将在其中创建验证脚本的服务器文档根目录下的文件夹的绝对路径。对于Inplace类型的 Web 服务器,该文件夹位于项目根目录下。

        该文件夹必须可通过http访问。

      • 验证脚本的 URL:在此字段中,输入将在其中创建验证脚本的文件夹的 URL 地址。如果项目根目录映射到可通过http访问的文件夹,您可以指定项目根目录或其下的任何其他文件夹。

    • 选择远程 Web 服务器以检查与远程服务器关联的调试器。

      • 创建验证脚本的路径:在此字段中,指定将在其中创建验证脚本的服务器文档根目录下的文件夹的绝对路径。该文件夹必须可通过http访问。

      • 部署服务器:在此字段中,指定类型为本地服务器远程服务器的服务器访问配置以访问目标环境。有关详细信息,请参阅配置与 Web 服务器的同步

        从列表中选择一个配置或单击“部署”对话框中的“浏览 ” 。浏览按钮

  3. 单击验证让 PhpStorm 创建一个验证脚本,将其部署到目标远程环境,并在那里运行它。

  4. 打开报告为已加载并与 Xdebug 关联的php.ini文件。

  5. php.ini文件中,找到该[xdebug]部分。

    将 的值xdebug.start_upon_error从默认值更改defaultyes

    将 的值xdebug.remote_mode从默认值更改reqjit

另请参阅 使用 PhpStorm 和 Xdebug 的即时调试和 PHP 异常断点

配置在 Docker 容器中运行的 Xdebug

要配置在Docker容器中运行的 Xdebug,请在Dockerfile中提供特定于 Xdebug 的参数,例如:

运行 pecl install xdebug \ && docker-php-ext-enable xdebug && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ && echo “xdebug.client_host = host.docker.internal” >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

在此示例中,我们正在修改/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini提供modeclient_hostXdebug 参数。

请注意,该xdebug.client_host值应替换为运行 PhpStorm 的机器的 IP 地址,该地址可从 Docker 容器访问。如果您使用的是Docker for WindowsDocker for Mac,您可以设置xdebug.client_hosthost.docker.internal,它会自动解析为主机的内部地址,让您可以轻松地从容器连接到它。

运行 pecl install xdebug \ && docker-php-ext-enable xdebug && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ && echo “xdebug.remote_host = host.docker.internal” >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

在此示例中,我们正在修改/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini提供remote_enableremote_hostXdebug 参数。

请注意,该xdebug.remote_host值应替换为运行 PhpStorm 的机器的 IP 地址,该地址可从 Docker 容器访问。如果您使用的是Docker for WindowsDocker for Mac,您可以设置xdebug.remote_hosthost.docker.internal,它会自动解析为主机的内部地址,让您可以轻松地从容器连接到它。

配置在 Vagrant 实例上运行的 Xdebug

要配置在Vagrant实例上运行的 Xdebug,请连接到 Vagrant 机器并在php.ini文件中提供特定于 Xdebug 的参数:

[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.mode=debug xdebug.client_host=10.0.2.2 xdebug.client_port=9003

请注意,该xdebug.client_host值为10.0.2.2。这是默认 Vagrant 设置中使用的网关,它允许从实例连接到运行 PhpStorm 的主机。

[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.remote_enable=1 xdebug.remote_host=10.0.2.2 xdebug.remote_port=9000

请注意,该xdebug.remote_host值为10.0.2.2。这是默认 Vagrant 设置中使用的网关,它允许从实例连接到运行 PhpStorm 的主机。

配置在 WSL 实例中运行的 Xdebug

要配置在WSL环境中运行的 Xdebug,请连接到 WSL Linux 安装并在php.ini文件中提供特定于 Xdebug 的参数:

[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.mode=debug xdebug.client_host=<WSL 主机 IP> xdebug.client_port=9003

请注意,该xdebug.client_host值必须设置为 WSL 主机的 IP 地址。要获取它,请在 WSL Linux 安装中运行以下命令:

猫 /etc/resolv.conf
[xdebug] zend_extension="<xdebug 扩展的路径>" xdebug.remote_enable=1 xdebug.remote_host=<WSL 主机 IP> xdebug.remote_port=9000

请注意,该xdebug.remote_host值必须设置为 WSL 主机的 IP 地址。要获取它,请在 WSL Linux 安装中运行以下命令:

猫 /etc/resolv.conf

如果您在 WSL 环境中使用 Docker Compose,请执行以下操作以获取正确的 WSL 主机 IP 地址。

  1. .bashrc连接到 WSL Linux 安装并在or.zshrc文件中为 WSL 主机的 IP 地址设置环境变量。

    导出 IP=$(主机名 -I)
  2. 将此环境变量传递给docker-compose.yml文件中的服务extra_hosts参数。php

    服务:php:extra_hosts:docker.for.wsl2.host.internal:${IP}
最后修改:2022 年 3 月 18 日