Xdebug永远不会停留在我的Sublime Text断点上

时间:2013-06-23 22:06:46

标签: php sublimetext2 xdebug

我已经在我的64位Win7机器上成功安装了Sublime Text和xdebug,并在Firefox中安装了最简单的Xdebug 插件。 Sublime Text以管理员身份运行,其项目文件设置正确的路径和xdebug设置,我只在具有有效PHP代码的行上设置断点。 WampServer在http://localhost:8080/上正常运行。

xdebug包命令似乎按设计工作,但调试器永远不会在我的断点处停止。在Sublime Text中启动或停止调试器会在Firefox中打开正确的HTML页面,尽管页面加载是比平常慢得多。

我已经设置了xdebug日志。这是一个样本。

Log opened at 2013-06-23 21:42:02
I: Connecting to configured address/port: localhost:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///C:/wamp/bin/php/firelogger/firelogger.php" language="PHP" protocol_version="1.0" appid="3948" idekey="sublime.xdebug"><engine version="2.2.3"><![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>

<- breakpoint_set -i 1 -n 10 -t line -f file://C:\Users\work\My Projects\ElseApps\EAFF\code\webroot\index.php
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1"><error code="1"><message><![CDATA[parse error in command]]></message></error></response>

<- breakpoint_set -i 2 -n 17 -t line -f file://C:\Users\work\My Projects\ElseApps\EAFF\code\approot\core\etc\eaff-index.php
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="2"><error code="1"><message><![CDATA[parse error in command]]></message></error></response>

<- breakpoint_set -i 3 -n 18 -t line -f file://C:\Users\work\My Projects\ElseApps\EAFF\code\approot\core\etc\eaff-index.php
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3"><error code="1"><message><![CDATA[parse error in command]]></message></error></response>

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

Log closed at 2013-06-23 21:42:04

为了完整性,这是我的php.ini文件的xdebug部分......

[xdebug]
zend_extension = c:\wamp\bin\php\php5.3.13\ext\php_xdebug-2.2.3-5.3-vc9-x86_64.dll
;xdebug.remote_enable = off
;xdebug.profiler_enable = off
;xdebug.profiler_enable_trigger = off
;xdebug.profiler_output_name = cachegrind.out.%t.%p
;xdebug.profiler_output_dir = "c:/wamp/tmp"
xdebug.remote_enable=1
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.remote_log=C:\wamp\bin\apache\apache2.2.22\logs\xdebug.log
xdebug.remote_mode=req
xdebug.profiler_enable=1
xdebug.profiler_output_dir="c:/wamp/tmp/"
xdebug.collect_params=On
xdebug.show_local_vars=On

...和Sublime Text项目文件。

{
    "folders":
    [
        {
            "path": "/C/Users/work/My Projects/ElseApps/EAFF/code"
        }
    ],

  "settings": {
    "xdebug": { "url": "http://localhost:8080" }
  }

单击开始调试并且页面缓慢加载后,Sublime Text的状态栏显示以下消息:

Xdebug: Page finished executing. Reload to continue debugging.

有人能找到我出错的地方,或建议一条有用的路径来诊断问题吗?

2 个答案:

答案 0 :(得分:2)

原因似乎是Sublime Text的Xdebug包传递给Xdebug的路径中的空间。原始查询...

<- breakpoint_set -i 3 -n 18 -t line -f file://C:\Users\work\My Projects\ElseApps\EAFF\code\approot\core\etc\eaff-index.php

...导致错误回复...

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="3"><error code="1"><message><![CDATA[parse error in command]]></message></error></response>

...但是Python源文件(我的第一个Python编辑)的快速而讨厌的黑客发送了这个......

<- breakpoint_set -i 1 -n 18 -t line -f file://C:\Users\work\MyProj~1\ElseApps\EAFF\code\approot\core\etc\eaff-index.php

......然后回来......

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1" id="39480001"></response>

......之后一切都按设计工作。

用于测试的短期黑客攻击是在Xdebug.py的第221行:

def uri(self):
    rawpath = os.path.realpath(self.view.file_name())
    outpath = rawpath.replace("My Projects", "MyProj~1")
    # return 'file://' + os.path.realpath(self.view.file_name())
    return 'file://' + outpath

我会进一步调查。我已经故意在Sublime Text项目文件中设置8.3路径名,但这不是传递给Xdebug的。如果是的话,应该没有问题。

答案 1 :(得分:0)

这是Sublime实施调试协议的一个错误。

正在发送的命令:

<- breakpoint_set -i 3 -n 18 -t line -f file://C:\Users\work\My Projects\ElseApps\EAFF\code\approot\core\etc\eaff-index.php

在文件名中包含空格(-f的值)。

它应该只使用路径周围的引号:https://github.com/derickr/xdebug/blob/master/xdebug_handler_dbgp.c#L2289https://github.com/derickr/xdebug/blob/master/xdebug_handler_dbgp.c#L2314 ...