2010-07-20 141 views
5

我已安装Xdebug 2.1,并且使用PHP 5.2.13运行。它可以成功连接到多个DBGP客户端(即xdebug.remote_log来回显示通信,并且客户端本身也显示传入连接),但它不会停在断点处。我试过NetBeansMacGDBp以及与Xdebug捆绑在一起的命令行debugclientXdebug成功连接到DBGP客户端,但不会在断点处停止

一个典型的交换是这样的:

Log opened at 2010-07-20 09:33:17 
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/hgfs/htdocs/mycompany/index.php" language="PHP" protocol_version="1.0" appid="14371" idekey="macgdbp"><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> 

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

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

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

Log closed at 2010-07-20 09:33:18 

的NetBeans试图设置断点,这些都是由Xdebug的承认:

<- breakpoint_set -i 7 -t line -s enabled -f file:///mnt/hgfs/htdocs/mycompany/index.php -n 9 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" state="enabled" id="139360004"></response> 

然而,Xdebug的仍然拒绝停止!

回答

7

如果在PHP配置中已将Xdebug加载为extension(即extension=xdebug.so)而不是zend_extension(即zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so),则会出现这种情况。

确保你没有在你的PHP配置extension=xdebug.so线随时随地,即使你敢肯定你正在使用zend_extension。例如,如果您的/etc/php5/conf.d/xdebug.ini中有zend_extension,则很可能会被代替为extension/etc/php5/apache2/php.ini。如果是这样的话,什么都不会抱怨,并且phpinfo()将尽职报告Xdebug已经加载! (Xdebug的2.1确实,当作为一个扩展加载问题phpinfo()一个小警告,但以前的版本做任何事。)

+0

哇,这真的救了我后,得到一些奇怪的行为配置与MacGDBP远程调试。我可以看到xdebug.remote_log中的连接成功,并且客户端正在接收连接,但连接迅速被丢弃。客户也没有输出。按照你的建议改变了“extension = xdebug.so”,并且一切都很好。 – milesw 2013-05-14 10:59:44

+0

您先生让我的一天。如果可以的话,我会赞扬一千次。 – Bgi 2013-06-08 15:40:17

0

必须在完整路径添加到xdebug.so文件,即使它被放置在php/modules/文件夹中,默认情况下,zend_extension不会在此文件夹中查找。

如果你有一个exension=xdebug.so行,xdebug会加载,但不会停在断点处(打败我为什么)。

删除所有exension=xdeabug.so(即使从cli ini文件中,也会加载)并添加zend_extension将解决此问题。

+0

这只是重复@mjs所说的一切...对于2岁的问题的答案应该比这更好。 – 2013-04-02 19:56:33

+0

我只是澄清,你必须使用完整的路径,他说:“zend_extension =/usr/lib/php5/20060613 + lfs/xdebug.so”但我认为他使用这条路径,因为他有一个编译版本或任何,因为我把xdebug.so放在php/modules文件夹中,所以我没有放完整的路径(就像你使用“extension”指令一样)并且没有工作。 – maxidirienzo 2013-04-03 12:50:24

0

如果将php文件放入符号链接文件夹,则XDebug将使用源文件夹路径而不是符号链接文件夹路径运行!

因此,为了使断点,你应该在你的IDE配置路径映射的符号链接文件夹和文件

0

我知道,这已经回答了,但我遇到了同样的问题,只是想提供我的答案出来,如果别人穿过运行这个。我意外地错过了我的路径中的一个案例值,它仍然允许我连接并运行调试器,但它不会停在我的断点处。我直到很多挫折才意识到,所以我只想让人们知道这可能也是一种可能。

相关问题