【问题标题】:So eclipse and xdebug walk into a bar, and then my apache server dies于是 eclipse 和 xdebug 走进了一个酒吧,然后我的 apache 服务器就死了
【发布时间】:2011-05-29 09:32:37
【问题描述】:

我正在使用 windows xp x86、wamp、apache2、php 5.3 x86、eclipse php 和 xdebug,在 localhost 上作为虚拟主机和 https 虚拟主机运行

eclipse 版本信息
面向 PHP 开发人员的 Eclipse 版本:Helios 发布 内部版本号:20100617-1415

不知何故,我成功地设置了 eclipse 和 xdebug,一切都很好。

然后我必须为我的项目创建一个 svn 分支,并使用 2 个新的虚拟主机重新配置 apache,并更新我的 windows 主机文件。

现在,当我在 eclipse 中启动调试模式时,一切都死了。

具体来说, 如果我没有设置断点,应用程序运行良好,请先解决我尝试调试的问题。

如果我设置断点,应用程序会在断点处停止,并且 eclipse 似乎正在控制球。但是现在,当我按下继续,或跳过,或进入,或打喷嚏时,eclipse 告诉我执行已恢复,但应用程序继续挂起,我必须重新启动 apache。

我怀疑 eclipse 和 xdebug 之间的通信出现了一些中断,因为在我看来 eclipse 正在发送我的 continue 或 step over 命令,但 xdebug 没有收到它。

但即使是这样,我也不知道该怎么办。我应该去哪里看?

更新:
我已经成功地能够使用notepad++、它的xdebug插件进行调试,并且像一个穴居人一样,在url中输入&XDEBUG_SESSION_START=session_name。然而,尽管我很喜欢 npp,但它的调试插件还是有问题的......

所以我注意到 stackoverflow 上有一个名为“phpstorm”的广告,它自称是一个轻量级但功能齐全的 php ide,具有原生 xdebug 支持。该演示需要重新启动才能使其工作,感觉有点像在摇摆不定的草稿表上工作,但它设法很好地调试了我的小型测试应用程序和真实应用程序,这比我在 eclipse 上所能说的要多那一刻,尽管这可能是我的错。

我可能应该早点发布这个:/ 这是我的 phpinfo() xdebug 部分

xdebug
xdebug support  enabled
Version     2.1.0

Supported protocols Revision
DBGp - Common DeBuGger Protocol     $Revision: 1.145 $

Directive   Local Value Master Value
xdebug.auto_trace   Off Off
xdebug.collect_assignments  Off Off
xdebug.collect_includes On  On
xdebug.collect_params   0   0
xdebug.collect_return   Off Off
xdebug.collect_vars Off Off
xdebug.default_enable   On  On
xdebug.dump.COOKIE  no value    no value
xdebug.dump.ENV no value    no value
xdebug.dump.FILES   no value    no value
xdebug.dump.GET no value    no value
xdebug.dump.POST    no value    no value
xdebug.dump.REQUEST no value    no value
xdebug.dump.SERVER  no value    no value
xdebug.dump.SESSION no value    no value
xdebug.dump_globals On  On
xdebug.dump_once    On  On
xdebug.dump_undefined   Off Off
xdebug.extended_info    On  On
xdebug.file_link_format no value    no value
xdebug.idekey   no value    no value
xdebug.manual_url   http://www.php.net  http://www.php.net
xdebug.max_nesting_level    100 100
xdebug.overload_var_dump    On  On
xdebug.profiler_aggregate   Off Off
xdebug.profiler_append  Off Off
xdebug.profiler_enable  Off Off
xdebug.profiler_enable_trigger  Off Off
xdebug.profiler_output_dir  C:\xampp\tmp    C:\xampp\tmp
xdebug.profiler_output_name xdebug_profile.%p   xdebug_profile.%p
xdebug.remote_autostart Off Off
xdebug.remote_connect_back  Off Off
xdebug.remote_cookie_expire_time    3600    3600
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  localhost   localhost
xdebug.remote_log   c:\xampp\apache\logs\xdebug.log c:\xampp\apache\logs\xdebug.log
xdebug.remote_mode  req req
xdebug.remote_port  9000    9000
xdebug.scream   Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars  Off Off
xdebug.show_mem_delta   Off Off
xdebug.trace_format 0   0
xdebug.trace_options    0   0
xdebug.trace_output_dir C:\xampp\tmp    C:\xampp\tmp
xdebug.trace_output_name    trace.%c    trace.%c
xdebug.var_displ

 ay_max_children    128 128
 xdebug.var_display_max_data    512 512
 xdebug.var_display_max_depth   3   3

这是我的 xdebug 日志文件 重现问题

Log opened at 2011-01-03 08:56:22
-> <init xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
fileuri="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
language="PHP" protocol_version="1.0"
appid="4404"
idekey="ECLIPSE_DBGP"><engine
version="2.1.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick
Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright
(c) 2002-2010 by Derick
Rethans]]></copyright></init>

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

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

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

<- feature_get -i 36 -n encoding
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_get"
transaction_id="36"
feature_name="encoding"
supported="1"><![CDATA[iso-8859-1]]></response>

<- feature_get -i 37 -n supports_async
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_get"
transaction_id="37"
feature_name="supports_async"
supported="1"><![CDATA[0]]></response>

<- stdout -i 38 -c 1
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stdout" transaction_id="38"
success="1"></response>

<- stderr -i 39 -c 1
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stderr" transaction_id="39"
success="0"></response>

<- breakpoint_set -i 40 -t line -f
file:///C:%5Cxampp%5Chtdocs%5Clab%5Czf-tutorial%5Cpublic%5Cindex.php
-n 21
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="breakpoint_set"
transaction_id="40"
id="44040001"></response>

<- run -i 41
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="run" transaction_id="41"
status="break"
reason="ok"><xdebug:message
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></xdebug:message></response>

<- stack_get -i 42
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stack_get"
transaction_id="42"><stack
where="{main}" level="0" type="file"
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></stack></response>

<- stack_get -i 43
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stack_get"
transaction_id="43"><stack
where="{main}" level="0" type="file"
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></stack></response>

<- eval -i 44 --
JHRoaXMtPmZpZWxkc1snYm9vbF9jb21wbGV0ZSdd
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="44"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 45 --
JHRoaXMtPnN0YWdlLT5nZXQoJ2Jvb2xfY29tcGxldGUnKQ==
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="45"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 46 --
JHRoaXMtPmZpZWxkc1snYm9vbF9jb21wbGV0ZSdd
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="46"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 47 --
JHRoaXMtPnN0YWdlLT5nZXQoJ2Jvb2xfY29tcGxldGUnKQ==
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="47"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

=== breakpoint reached, execution pauses.  In eclipse I click "step
over"

<- step_over -i 48

=== end of log

【问题讨论】:

  • 我真的帮不上忙,但我遇到了类似的问题,xdebug 随机崩溃 Eclipse/恢复。它仍然不时发生,但我不知道为什么。我会很感兴趣地看到答案。哦,+1 令人耳目一新的幽默:D
  • +1 为标题,如果有人编辑它,让我知道,我会为你恢复它(或恢复它;))~~~至于实际问题,idk,但听起来你知道中断在哪里(在 eclipse 和 xdebug 之间)......我不使用 eclipse/apache,所以我帮不了你,但祝你好运。
  • 1.我不喜欢 PHPStorm。我发现它笨重且无法使用。 2. 您使用的是 32 位还是 64 位 Eclipse,分别是哪个版本? 32 位或 64 位 PHP,以及哪个版本?
  • 我假设您尝试过将 PHP/XDebug 设置重置为默认设置并从头开始配置?如果你这样做,那么至少你可以确定不是你的 XDebug 配置导致了问题。然后尝试重置 Apache 主机设置并仅将您的活动程序添加为虚拟主机,调试您的程序,然后稍后添加其他程序(取决于您在它上面运行了多少其他东西,以及在您这样做时延长停机时间是否可行这)。同样,尝试创建一个与您的程序相关联的新 Eclipse 项目并在调试中运行它以查看它是否是 Eclipse 的设置。
  • xdebug 曾经在 Windows 上遇到 curl PHP 扩展问题。如果您启用了它,请尝试禁用它以查看是否有帮助。

标签: php eclipse apache debugging xdebug


【解决方案1】:

This article 听起来很有希望。

从外观上看,XDebug 和 Eclipse(在其 php 开发环境中)都可以使用 DBGp 协议。根据那篇文章,您可以通过弄乱 Apache 的 .htaccess 文件或通过运行 DBGp 代理(无论是什么)来使事情正常进行。文章中的更多详细信息。

我怀疑 XDebug 和 Eclipse 都连接到同一个 PHP 调试会话,相互踩踏,导致欢闹。

那个或“未定义的行为”。无论哪种方式。

【讨论】:

  • 不是 xdebug 和 ide 应该连接到同一个调试会话吗?如果不是,是否有一种简单的方法来测试是否是这种情况?我不认为这是多客户端问题,因为我可以连接其他调试器。
  • 我猜。可以肯定的是,请尝试在 Eclipse 中禁用 PHP 调试。 Apache 也有可能对 PHP 和任何其他 eclipse-debugs 使用类似的调试机制,而这两件事变得纠缠不清。 PS:这是 Eclipse 中的 XDebug 插件,还是单独的应用程序?看起来有一个 XDebug 插件,但如果你不使用它,那可能就是问题所在。
【解决方案2】:

这听起来像是一个愚蠢的问题,如果是这样,我深表歉意,但是您是否在 Eclipse 调试配置中创建了一个新的 PHP 服务器来映射到您的新虚拟主机?

每次我创建一个新的虚拟主机时,我通常会创建一个全新的调试配置在该配置中映射到虚拟主机的新 PHP 服务器,以便我可以轻松地从调试中选择它启动新会话时下拉配置。

对于任何想知道的人,我可以通过转到 Run->“Debug Configurations...”,从左侧菜单中选择“PHP Web Page”,单击 new+(或者如果我已经有一个,则复制),然后然后在“服务器”选项卡下,其中显示“PHP Server”,单击“新建”,然后输入文档根目录的虚拟主机 URL。

【讨论】:

  • 不傻,但是我已经做到了。我有一个用于实际工作应用程序的虚拟主机,一个用于我的实验室/沙箱的虚拟主机,每个都有调试配置,每个都有相同的问题
【解决方案3】:

呜呜呜呜

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312951#c8

创建一个新的工作区可以让我成功调试。

现在我最好的猜测是在同一个工作区中有两个项目在同一个 ip 上有不同的虚拟主机。

所以我不会再这样做了。

【讨论】:

  • 那么,这究竟是如何工作的呢?您在用作工作空间的 Web 根目录中是否有单独的文件夹?我似乎无法解决我的问题。
  • 每个webapp都有自己的webroot,配置为apache虚拟主机。我创建了一个新的 eclipse 工作区,然后是新项目,从现有源创建,并选择了特定应用程序的 webroot。
【解决方案4】:

现在我最好的猜测是在同一个工作区中有两个项目在同一个 ip 上有不同的虚拟主机。

我也在调试两个项目,在同一个 Eclipse 工作区中,在同一个 IP 上具有不同的 VHost,并使用 apache。

我没有遇到你的问题。

虽然我的 apache 和其他东西位于 debian 的 vmware-emulation 中,而我的 Eclipse 位于 WinXP 中。

最好的

拉斐尔

【讨论】:

  • 嗯,在这种情况下,也许它还与我正在调试的两个虚拟主机都在我的 127.0.0.1 上有关
  • 而 apache 并没有抱怨这一点?嗯……我不知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多