Xdebug即使在记录中断时也不会在断点处停止,但表示它已连接到客户端

时间:2015-06-11 12:58:04

标签: debugging phpstorm breakpoints xdebug remote-debugging

我已经尝试了几周让我的PHPStorm通过Xdebug连接到远程主机。最近我发现客户端的主机阻塞了端口9000.我终于解决了这个问题,现在xdebug日志显示它正在连接到客户端(当然是我)。

但是,它不会在任何断点上停止。 PHPStorm中设置的断点甚至不会显示在日志中。调用xdebug_break();至少会被记录为休息,但它仍然没有停止。

基于此处的其他问题,我已确认xdebug已加载zend_extention=/full/path/xdebug.so而未加载extension=xdebug.so

我也尝试从端口9000切换到端口9001,结果没有变化。

日志条目是:

Log opened at 2015-06-09 14:41:10  //and many other dates and times
I: Checking remote connect back address.
I: Remote address found, connecting to MY.IP.HE.RE:9000.  //similar message on port 9001 after trying that
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///chroot/home/company/remotehost.com/html/index.php" language="PHP" protocol_version="1.0" appid="2294" idekey="PHPSTORM"><engine version="2.2.2"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2013 by Derick Rethans]]></copyright></init>

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="break" reason="ok"><xdebug:message filename="file:///chroot/home/company/remotehost.com/html/app/code/community/Zzyzzx/Stores/controllers/TestController.php" lineno="11"></xdebug:message></response>

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

Log closed at 2015-06-09 14:41:13

它从中得到的文件在IDE中设置了3个断点,在第11行编码了一个断点。

可能导致它无法跟踪断点并让我调试的原因是什么?

我在服务器设置中使用的路径是/home/company/remotehost.com/html映射到我的项目根目录,其中包含相同的文件。我理解这是从root的绝对路径,如果我理解它的日志证实了代码的中断。它是唯一具有路径集的文件。我是否需要为每个文件设置路径?

我也尝试删除服务器以期触发对话框,但是没有触发,我只是获得了与新时间/日期/ IP完全相同的日志条目。

我刚刚发现每当我试图重新加载我正在调试的页面时,在我的“运行”菜单中有一个“恢复程序”的选项,它会显示一个列表,其中包含我正在尝试调试的文件。单击该按钮将打开调试工具窗口,其中显示消息“等待来自JetBrains IDE支持扩展的Chrome ...”消息。这不是调试javascript的吗?它是否试图将我的PHP调试为Javascript?

此外,我尝试使用其他几个具有类似结果的xdebug客户端。它连接然后给出相同的消息。让我觉得它不是PHPStorm。

我尝试的所有内容都是尝试调试以下代码:

    class Zzyzzx_Stores_TestController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        echo "in the controller 1 <br />";
        xdebug_break();
        echo "in the controller 2 ";
        //3 commented lines of unused code
        //
        //
        phpinfo();
        //2 commented lines of unused code
        //
    }
}

在每个“回声”的ide中设置中断,当然你可以看到编码中断。

调试本地工作正常。

1 个答案:

答案 0 :(得分:3)

断点不起作用的一个原因是由于Mac OSX的区分大小写错误。

我发现如果一个文件名与该类的情况不匹配,那个文件的断点将不起作用,即使应用程序的其余部分调试正常,并且“在第一行中断”显示调试器通常都在工作。

OSX上的文件系统本质上是不区分大小写的,但奇怪的是命令行区分大小写,这会让你误以为它更像其他区分大小写的Unix。这样就会让你相信不会出现案例不匹配的情况,因为它会完全被破坏而你会注意到!

但是我觉得OSX真的更像Windows,在这方面非常宽容,直到你把文件上传到Linux服务器......

我在LegacyJsonMetadataMapper中有一个名为LegacyJSONMetadataMapper.php的课程。自动加载器工作正常,应用程序工作正常,PHPStorm没有提到案件的差异 - 我没有注意到它。但它根本不会触发任何断点。一小时后摆弄映射和服务器配置(已经工作多年了!),然后我读了a PHPStorm bug report侧面提到这个方面。我改变了案例,断点现在有效。

注意,如果命名空间路径中的任何文件夹也与命名空间“slugs”的情况不匹配,也会发生这种情况。我只是遇到了同样的问题(有些断点工作,有些断点不行)。