【问题标题】:Xdebug is always resetting session with phpStormXdebug 总是用 phpStorm 重置会话
【发布时间】:2016-04-11 08:24:12
【问题描述】:

以前我的身份从未被提及,或者我不知道如何用谷歌搜索它!我的开发环境已更新到 ubuntu 14.04、phpStorm 2016.1(仍处于试用版)、java 版本“1.7.0_95”。 所有设置都很好,我可以调试,但是在调试开始后(大约一分钟或更短时间),所有调试会话都会终止或从第一个断点重新启动。 我也收到很多“调试会话已完成而没有暂停”的通知,而没有发出任何调试请求(请参阅附件 plz)。

请告诉我要检查什么或可能是什么原因。 提前致谢。


更新

以下是 php.ini 中的 xdebug 设置

[xdebug] 
zend_extension="/usr/lib/php5/20121212/xdebug.so"
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

开发框架是magento 1.14.2 EE

【问题讨论】:

  • 从菜单中,“运行”> 在 php 脚本的第一行中断
  • 谢谢,这个没有勾选,我的意思是第一个断点是我在代码中添加的第一个断点,而不是第一行:)
  • 如果您发布用于 xdebug 的 php.ini 配置以及代码的一般大纲,这可能会有所帮助。当我在加载特定页面时未执行的代码行上设置了暂停点时,我得到了“调试会话完成而没有暂停”的提示。
  • @Thornview 请检查更新。关于通知,我什至没有尝试启动调试会话就得到它。
  • 你试过玩路径映射吗? CTRL + ALT + S(设置)语言和框架> PHP>服务器-这有时对我有帮助如果没有单行,xDebug也会在数组创建时出现中断问题,因此将中断点放在“$a = [”行不生效但在“];”上将停止:)

标签: php phpstorm xdebug


【解决方案1】:

您已打开remote_autostart,因此每次重新加载页面时,xDebug 都会尝试调试脚本,即使您不是故意的。

根据the documentation

当这个设置被设置为 1 时,Xdebug 将总是尝试启动一个 远程调试会话并尝试连接到客户端,即使 GET/POST/COOKIE 变量不存在。

设置xdebug.remote_autostart = 0 应该会停止有关调试的错误消息。

【讨论】:

  • 谢谢,至少解决了一个问题 :),xdebug 会话仍在终止..
  • 在不查看代码和调试会话的情况下解决这个问题会比较棘手。我想不出什么会导致这样的重置。
  • 谢谢 .. 我知道在这里粘贴所有代码比较棘手,但不可能(代码是普通的 magento 代码)并且它在每个地方都发生(会话终止),所以我认为它与自己执行代码。应该是一些通常会影响 Xdebug 的组件(如 OS、php_fpm、nginx ...等)
  • 我也遇到了这种情况,我被卡住了。 PHP 是一个 PITA。我在 Python 和 Go 中都没有遇到过这种情况。
  • 谢谢,您的回答对我帮助很大。还删除了远程xdebug日志文件,路径在php.init中配置为xdebug.remote_log = "c:\xampp\tmp\xdebug.txt"
【解决方案2】:

我会引用一个明确的回复from the official forums

您是对的,可以在没有达到任何断点的情况下进行调试会话,例如如果您有 Ajax 请求,这很常见。 该警告旨在帮助新用户配置调试器。如果“Break at first line”选项被禁用,并且有一些错误会默默地阻止您设置断点(例如,PHP|Servers 的路径映射中有错字,远程和本地文件版本不同步等),那么什么都不会发生页面重新加载。这种情况与 xdebug 错误配置(例如错误的“xdebug.remote_host”、“xdebug.remote_port”)无法区分,因此您可能会花费大量时间来找出问题所在。该消息表明调试器本身已正确配置,并建议您进行故障排除过程的下一步。

如果您没有问题并且没有断点的调试会话是预期行为,那么只需禁用它

【讨论】:

  • 我在 Windows 上遇到了同样的问题。由于没有遇到任何断点,问题是 not 退出。问题是:您已经到达断点并单步执行了一些代码,然后您在查看变量/表达式等时稍等片刻,Phpstorm 中的调试窗格变为空白,所有变量/值都消失了,你就不能再使用步进按钮了,服务器返回500响应给客户端。
  • 感谢您的回复,对我来说,在将 php => php 7 和 Xdebug 更新到最新稳定版本后已修复。
【解决方案3】:

转到 PHPStorm - 设置 -> 语言和框架 -> PHP -> 调试

... Section "External connections" -> "Break at first line in PHP scripts" ...禁用此选项

补充建议:

... Section "Xdebug" -> 禁用最后两个复选框(“Force break at first line...”)

...“高级设置”部分 -> 禁用“如果调试会话已完成且未暂停则通知”

【讨论】:

  • 谢谢,你的回答帮了我很多
【解决方案4】:

你提到你使用 php_fpm,所以尝试运行

sudo service php5-fpm restart

【讨论】:

  • 已经尝试重启我所有的环境服务,谢谢:)
【解决方案5】:

但在调试开始后(大约一分钟或更短时间),所有调试会话都会终止或从第一个断点重新启动

我终于找到了解决办法。我的 Apache 配置设置为在 40 秒后终止空闲连接 - 停止调试会话并向客户端返回 500 错误。

要解决此问题,请打开您的 apache httpd.conf 文件并查找以下设置

LoadModule fcgid_module modules/mod_fcgid.so

如果您正在使用此模块,请设置或更改以下指令的值

FcgidIOTimeout 300

如果未指定,此设置默认为 40 秒,将其设置为 300 将允许每个连接在 apache 终止之前等待 5 分钟。

【讨论】:

    【解决方案6】:

    大多数其他答案都是有效的,但就我而言,这是 PHP 版本和 Xdebug 版本之间的不兼容。 所以我的解决方案是将 PHP => PHP 7 和 Xdebug 更新到最新的稳定版本。 我觉得最好在单独的答案中提及它,以防有人遇到同样的情况。

    更新:xdebug 3.1.2 工作设置:

    配置文件路径:/etc/php/8.1/mods-available/xdebug.ini 设置:

    zend_extension=xdebug.so
    xdebug.mode=调试 xdebug.start_with_request=是
    xdebug.client_host=127.0.0.1 xdebug.client_port=9003
    xdebug.var_display_max_depth = -1 xdebug.var_display_max_children = -1
    xdebug.var_display_max_data = -1 xdebug.idekey = "x_debug"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2013-07-28
      • 2021-08-28
      • 1970-01-01
      • 2017-07-20
      • 2012-02-29
      相关资源
      最近更新 更多