【问题标题】:XDebug and RESTful server using PHPStorm or POSTman使用 PHPStorm 或 POSTman 的 XDebug 和 RESTful 服务器
【发布时间】:2013-10-09 00:10:03
【问题描述】:

如何让 REST 客户端(例如内置于 PHPStormPOSTman 的客户端)与 XDebug 一起使用?

在我当前的 XDebug 设置中,使用 PHPStorm 和 Bookmarklet provided 我能够让它在 Chrome 和 Firefox 中运行 - 但只要我尝试使用 POSTman 或任何其他 REST 客户端,我就可以'不知道如何开始。

干杯。

【问题讨论】:

  • 使用那个“电话句柄”图标,以便 IDE 开始侦听调试连接。然后将 xdebug (php.ini) 配置为调试 every php 脚本 (xdebug.remote_autostart = 1),或者查看将 xdebug 会话启动参数 (XDEBUG_SESSION_START={{name}}) 添加到 URL 是否有帮助:xdebug.org/docs/remote。或者..您可以将 xdebug cookie 作为标题之一传递(例如,由书签设置的那个)。除此之外:youtrack.jetbrains.com/issue/WI-17031
  • 我试图避免在每个请求上都启动 XDEBUG - 但是,将?XDEBUG_SESSION_START=PHPSTORM 添加到 URL 的末尾是一种享受。 (一个稍微凌乱的解决方案,但有效)

标签: rest xdebug phpstorm


【解决方案1】:

您可以使用以下方法之一:

  1. 配置您的 Xdebug(通过编辑 php.ini)尝试调试 每个 php 脚本。关键选项:

    • Xdebug v2:xdebug.remote_autostart = 1
    • Xdebug v3:xdebug.start_with_request = yes
  2. 在实际 URL 中添加 Xdebug 会话启动参数(XDEBUG_SESSION_START={{KEY}} -- http://xdebug.org/docs/remote ),例如:?XDEBUG_SESSION_START=PHPSTORM

  3. 将 Xdebug cookie 作为标头之一传递(例如,由 bookmarklet 或浏览器扩展设置的标头)。

为此:确保在 PhpStorm (Run | Start Listen for PHP Debug Connection) 中提前激活了“电话手柄”图标。


P.S.如果您使用PostmanInsominia 或类似的(另一个 REST 客户端),那么 IMO 最好/最透明的方式是使用 Xdebug cookie。您很可能已经在使用单独的环境(例如“dev”、“test”、“production”),因此您只能在需要的地方使用此类 cookie(当然取决于使用的工具和版本)。

这样就无需编辑 URL(即使您将其作为“条件参数”:对于某些环境存在而对于另一个环境不存在)或将 Xdebug 配置为“调试所有请求”。

来自我的 Postman 的此类 Xdebug cookie 示例(根据需要对其进行编辑;此处为本地 some-domain.local.test 假域设置):

XDEBUG_SESSION=value; Path=/; Domain=.some-domain.local.test; Expires=Tue, 19 Jan 2038 03:14:07 GMT;

由于主机 URL 应该是您的环境的一部分(例如,端点 URL 将类似于 {{host}}/api/v1/welcome),因此此类 cookie 将仅发送到开发域而不是生产域。

【讨论】:

  • 感谢您的回答。正如我上面所说,第二个对我有用,尽管我认为我对尝试实现第三个更感兴趣 - 我唯一的问题是我没有任何通过 POSTman 或 PHPStorm 设置 cookie 的乐趣。无论如何,这现在有效,所以谢谢你:)
  • 如果有人使用 REST Console chrome 扩展,添加 XDEBUG_SESSION_START 作为他们的键和 PHPSTORM 作为请求有效负载(请求参数)下的值对我有用
  • 这解决了我的问题,我必须把f.q.d.n/rest/route?XDEBUG_SESSION_START=PHPSTORM,然后我还必须添加到标题:Cookie:XDEBUG_SESSION=PHPSTORM。我目前正在调试一个安静的服务,所以这是有用的
  • 第一个答案对我有用;如果脚本运行时 PhpStorm 没有在监听,我很想知道它是否会导致开发盒出现明显的减速。
  • @M1ke xdebug 尝试连接到调试客户端(对于每个请求/主脚本)会有大约 1 秒的延迟。
【解决方案2】:

这让我发疯了。我刚刚更新到 PHP 7.1 并且工作的 xdebug 不再工作。我更新了xdebug.so 文件(Linux),php --version 表明 xdebug 确实正在加载并工作。但是当我使用 Postman 时,调试器从未启动。

这是解决方案。如果您使用 Apache 作为服务器,那么您需要启用 PHP 7.1 模块并重新启动 Apache:sudo service apache2 restart

【讨论】:

  • 这解决了我的问题。我正在使用代客服务,所以这样做 valet stopvalet start 就可以了。
【解决方案3】:
xdebug.remote_timeout = 60000

为我工作。由于我的 Mac 非常慢,并且远程调试器在 200 毫秒后超时(默认值)

【讨论】:

    【解决方案4】:

    警告

    xdebug >= 3.0 更改了 php.ini 中的参数。 升级xdebug后,这里的大部分答案都不相关了。

    参考: https://xdebug.org/docs/upgrade_guide

    基本上,您需要在 php.ini 中添加类似这样的内容:

    xdebug.mode=develop,gcstats,coverage,profile,debug
    xdebug.start_with_request=1
    xdebug.idekey=PHPSTORM
    

    【讨论】:

      【解决方案5】:

      只需在网址末尾添加?XDEBUG_SESSION_START=filter_string,例如:

      https://new-supplier.local/api/login?XDEBUG_SESSION_START=PHPSTORM
      

      PHPSTORM 是我的默认过滤器字符串,你可以使用任何你想要的。您的编辑器应该设置为通过 IDE 键(过滤器字符串)过滤连接,仅此而已。您应该能够以与 Chrome 或 FF 相同的方式进行调试。

      【讨论】:

        【解决方案6】:

        最终让我的 Postman/PHPStorm Xdebug 工作的是在 PHPStorm 中添加 PHP 远程调试 配置:

        运行 -> 编辑配置 -> + -> PHP 远程调试

        我只是将名称设置为 localhost 并保存 - 没有 IDE Key

        【讨论】:

          猜你喜欢
          • 2015-07-04
          • 1970-01-01
          • 1970-01-01
          • 2020-06-15
          • 2019-04-28
          • 2013-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多