使用 xdebug 的 PHPStorm 本地调试永远不会捕获并且无法验证

PHPStorm local debugging with xdebug never catching and can't validate

当运行连接本地服务器时,我似乎无法在 PHPStorm 中使用 xdebug。服务器文档根目录是 PHPStorm 项目根目录的直接父级,我可以 运行 Web 浏览器上的项目并通过 "Tools | Test RESTful Web Server" 选项。

我:

  1. am 运行在 mac (OSX 10.10.5) 上安装我的 Apache 服务器并使用 brew 安装 php 5.5 和 xdebug 2.3.3(老实说这是一个巨大的麻烦,因为什么都不想工作)。 xdebug 在我的 phpinfo() 中正确显示,当我使用终端命令 $ php -i 时,我认为它已正确安装。

  2. 遵循了一些与我的情况不相关的指南、教程和 SO 问题and/or他们的答案无效或不存在

    • Configuring Xdebug (PHPStorm) 可能更多来自 PHPStorm 网站...
    • 这个是我能找到的最接近我的情况的,它也没有解决我的问题。我能找到的所有其他工具都不是很有用,因为它们使用的是 MAMP 堆栈。
  3. 无法在 "Run | Web Server Debug Validation" 中使用 PHPStorm 验证我的 xdebug。每次我尝试时,无论我如何 fiddle 设置,它要么是连接被拒绝错误(我认为这是因为我正在尝试未打开的端口)要么是: Web Server Debug Validation returns unexpected format error.

XDebugger 在其网站上提供的小书签和浏览器扩展也都失败了。

对我来说奇怪的是,如果我在 apache httpd.conf 中创建一个虚拟主机,并将服务器名作为我的外部 IP 地址并使用相同的文档根目录,我可以访问它(不是奇怪的部分) 但我也可以 运行 调试器完美地通过它。这是不可取的,因为现在似乎任何人都可以 运行 我的代码并接收包含敏感信息的响应。他们也许还可以启动我的调试器,但如果可以的话,那会更麻烦。

到目前为止,我已经能够在没有调试器的情况下工作,但在某些情况下,如果有一个调试器会很棒。展望未来,我可以肯定地说,拥有一个调试器将对我的项目有很大帮助,所以任何帮助都将不胜感激。

我也不想重新安装所有东西,因为一开始就全部设置起来非常痛苦,但如果万不得已,我可能不得不这样做。

如果需要,我可以提供更多信息。

谢谢, 雅各布

我设法进行了步骤调试以进行一些更改:

  • 对于验证测试,我尝试验证包含我的项目代码的 sub-folder 而不仅仅是本地主机。 PHPStorm 项目本身被设置到这个文件夹。我认为是因为我的文档根目录在项目之外,所以它拒绝验证 xdebug 扩展。
  • 我还在“工具”下配置了我的 DBGp 代理,以接受 xdebug 设置为默认值的 IDE 密钥,并更新了 xdebug 书签中的 IDE 密钥。

我现在可以使用 XDebug Debugger 书签对 Run > Start Listening for PHP Debug Connections 和 in-browser 进行单步调试。

雅各布

除了已接受的答案外,您还需要下载 运行 服务器本身的调试代理

  1. 从 Komodo (http://code.activestate.com/komodo/remotedebugging/)下载并安装 Python 远程调试包

  2. 在网络服务器上启动 DBGp 代理。

  3. 在 PHPStorm 中,开始侦听调试器:"Run | Start Listening for PHP Debug Connections"(您可能需要注册调试服务器:"Tools | DBGp Proxy | Register IDE")

Jet Brains 操作方法:https://confluence.jetbrains.com/display/PhpStorm/Multi-user+debugging+in+PhpStorm+with+Xdebug+and+DBGp+proxy#Multi-userdebugginginPhpStormwithXdebugandDBGpproxy-2.DBGpproxy

None 的建议对我有用,所以我继续挖掘。 即使 IPV6 在我的网络适配器上被禁用,它仍然是环回适配器上的首选。 ping localhost 将导致 Reply from ::1: time<1ms

我通过在 Windows 注册表中优先选择 IPV4 而不是 IPV6 来解决此问题: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters 将 DisabledComponents 设置为十六进制 0x20 或十进制 32。

现在 ping localhost 返回 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 并且调试器验证工作正常。