【发布时间】:2015-08-27 04:33:06
【问题描述】:
我已经尝试了几个星期来让我的 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 映射到我的项目根目录,其中包含相同的文件。我理解这是从根目录开始的绝对路径,如果我理解的话,它会通过显示代码中断的日志来确认。它是唯一具有路径集的文件。我需要为每个文件设置路径吗?
我还尝试删除服务器以希望触发对话,但它没有被触发,我只是得到与新时间/日期/IP完全相同的日志条目。
我刚刚发现,每当我尝试重新加载我正在调试的页面时,在我的“运行”菜单中有一个“恢复程序”选项,它会显示一个包含我正在尝试调试的文件的列表。单击它会打开调试工具窗口,其中显示消息“正在等待来自 JetBrains IDE Support extension for 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
//
}
}
每个“echo”的ide中都设置了breaks,当然你可以看到编码的break。
在本地调试这个工作正常。
【问题讨论】:
-
那么..你解决了吗?
-
不,还没有。由于客户的原因,它被搁置了几天。路径映射看起来不错。有没有办法删除所有映射并强制它再次执行向导?
-
另外,@LazyOne 你能确认路径图应该是绝对的根目录还是相对于项目?
-
1) 是的——只需删除那个“服务器”条目(或在那里更改主机名)——如果 IDE 没有看到任何具有正确
hostname:port对的条目,它将触发那个小对话框/向导再次。 2) 远程路径应该是从根目录开始的绝对 路径。还要确保它是最终/已解析路径(即其中没有符号链接)——这就是 xdebug 的工作方式——它解析所有符号链接并仅适用于最终路径。
标签: debugging phpstorm breakpoints xdebug remote-debugging