【问题标题】:Xdebug - command is not availableXdebug - 命令不可用
【发布时间】:2013-07-03 07:05:57
【问题描述】:

我正在 PhpStorm 中远程调试我的项目。 IDE 显示“已连接”片刻,然后立即进入“等待传入连接...”

以下是本次会议的 Xdebug 日志

I: Connecting to configured address/port: X.x.x.x:9000.
I: Connected to client. :-)
> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///xxx/info.php" language="PHP" protocol_version="1.0" appid="4365" idekey="10594"><engine version="2.2.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATAhttp://xdebug.org]></url><copyright><![CDATA[Copyright (c) 2002-2013 by Derick Rethans]]></copyright></init>

<- feature_set -i 0 -n show_hidden -v 1
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="0" feature="show_hidden" success="1"></response>

<- feature_set -i 1 -n max_depth -v 1
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="max_depth" success="1"></response>

<- feature_set -i 2 -n max_children -v 100
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_children" success="1"></response>

<- status -i 3
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="3" status="starting" reason="ok"></response>

<- step_into -i 4
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="4" status="stopping" reason="ok"></response>

<- breakpoint_set -i 5 -t line -f file://xxx/info.php -n 3
> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5"><error code="5"><message><![CDATA[command is not available]]></message></error></response>
"

根据 Xdebug 文档状态“停止”是 '代码执行完成后的状态。这通常发生在代码执行结束时,允许 IDE 进一步与调试器引擎交互(例如,收集性能数据,或使用其他扩展命令)。'

所以我的调试器在到达第一个断点(设置在第一行)之前停止。

会不会是服务器配置的问题?

【问题讨论】:

  • 1) 调试是否仅在某些文件中有效.. 还是根本不起作用(在此项目中)? 2) 这是远程项目吗(xdebug 和 IDE 在不同的/虚拟机上)? 3) 是否使用了符号路径?现在可能是因为路径映射配置错误(A)xdebug 适用于去链接/解析/真实路径,而 IDE 可能适用于符号链接的路径和 B)本地路径与远程不同); 4) xdebug 根本无法在某些断点上中断(例如,多行定义、没有大括号的循环体等)——尝试将其设置在基本的简单行上;
  • 5) 看看放xdebug_break(); 是否会做任何不同的事情(以这种方式强制断点)。除此之外——看看 IDE 方面发生了什么——按照这些说明收集更详细的 php 调试日志:devnet.jetbrains.com/docs/DOC-1202
  • 1) 此服务器根本无法调试。 2)它在不同的机器上,我在 NAT 后面。 3) 是的,使用了符号路径。我想我在 PhpStorm 中添加了正确的路径映射(与我过去所做的相同)。 4) 我的脚本有 4 行

标签: xdebug phpstorm


【解决方案1】:

你应该去 php.ini 并删除这样一行

extension=php_xdebug-...

这条线是如何创建的。

你把一个 xdebug 的文件放到 PHP 扩展路径中,像这样

.../php5.X.XX/ext/

现在您可以通过任何 _AMP UI 工具(如 WAMP、XAMPP 等)打开此 PHP 扩展。


为了防止这种痛苦的不幸,您必须将 Xdebug 文件放入

.../php5.X.XX/zend_ext/

它将使 Xdebug 对任何 _AMP 工具都隐藏。

还要更正您的 zend_extension 参数。

zend_extension = .../php5.X.XX/ext/php_xdebug-...

zend_extension = .../php5.X.XX/zend_ext/php_xdebug-...

这是常见的默认路径。


请记住!
使用 PHPStorm、Eclipse、Zend 等,可能你应该考虑更正两个 php.ini 文件。

第一个用于您的网络服务器。一般在Apache文件夹下

...\Apache2.X.XX\bin\

第二个是直接 PHP 脚本调试。它位于 PHP 托管文件夹中:

...\php\php5.X.XX\

【讨论】:

  • 我第一次错过了这个答案,因为它有点啰嗦,确保为您的 PHP 版本正确加载了 xdebug.so 模块。经验法则; PHP >= 5.3 使用 zend_extension=/path/to/xdebug.so 和线程 PHP zend_extension_ts=/path/to/xdebug。在标题 Configure PHP to Use Xdebug 下有更多详细信息xdebug.org/docs/install
  • 你解决了我的问题。尽管另一个问题与我的完全匹配,所以我在您的帮助下在这里回答了它:stackoverflow.com/a/35125321/631764
  • 经过数小时的努力,删除“extension=xdebug...”行成功了,谢谢
【解决方案2】:

在我的情况下,“breakpoint_set”/“command is not available”问题的原因被禁用了xdebug.extended_info 选项(默认情况下它是启用的,但我禁用它以进行分析)。
断点不起作用,然后 xdebug.extended_info 被禁用。
重新启用xdebug.extended_info 后,我的断点工作了。

【讨论】:

    【解决方案3】:

    我在 windows 下遇到了同样的问题,使用 phpstorm,我在谷歌上搜索了很多次。最终,我的决定是:

    php.ini:

    xdebug.remote_mode = "jit"
    

    来自 phpstorm 教程,JIT - “Just-In-Time”模式

    https://www.jetbrains.com/help/phpstorm/2016.2/configuring-xdebug.html#d43035e303

    更新

    不,这个选项实际上对我没有帮助。但是,我最终解决了我的问题:

    我在 win 7 中使用 phpstrom,并以这种方式配置了 路径映射

    d:\serverroot\vhost\www => d:\serverroot\vhost\www

    但在我的旧配置中,我发现了这样的映射:

    d:\serverroot\vhost\www => d:/serverroot/vhost/www

    终于

    在服务器配置中路径映射的 Windows 机器上,将 \ 替换为 /

    【讨论】:

    • 一般来说,检查 php.ini 配置,包括 cli 和 apache。我在 php.ini 上添加了很多东西,我的问题通过从我的 IDE 的官方教程中复制 /etc/php5/apache2/php.ini 中的最小 php.ini 配置得到解决。
    【解决方案4】:

    我认为发生这种情况的唯一原因是您的 info.php 有语法错误。在这种情况下,没有要执行的代码,脚本在发出“step_into”时直接进入“停止”。

    【讨论】:

      【解决方案5】:

      Zend_Opcache / OPCache 也可能导致此问题,如果您启用了它,请尝试禁用它。

      【讨论】:

        【解决方案6】:

        当 XDebug 扩展被编译为 PHP 运行时的非调试版本时,可能会发出此错误。该过程不会失败(因为它不应该失败),但 XDebug 扩展将在该过程期间停止执行任何操作

        【讨论】:

          猜你喜欢
          • 2016-02-07
          • 2017-12-07
          • 2014-09-23
          • 2013-11-20
          • 2020-10-03
          • 2012-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多