我安装了Xdebug 2.1,并使用PHP 5.2.13运行。它可以成功连接到多个DBGP客户端(即xdebug.remote_log
来回显示通信,客户端本身也显示传入连接),但它不会在断点处停止。我尝试了NetBeans,MacGDBp以及与Xdebug捆绑在一起的命令行debugclient
。
典型的交易所看起来像:
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仍然拒绝停止!
答案 0 :(得分:10)
如果您在PHP配置中加载了extension
(即extension=xdebug.so
)而不是zend_extension
(即zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
),则会出现这种情况。< / p>
确保您的PHP配置中没有extension=xdebug.so
行 ,即使您非常确定自己正在使用{ {1}}。例如,如果zend_extension
中有zend_extension
,则可能会被/etc/php5/conf.d/xdebug.ini
中的extension
取代。如果是这种情况,则不会抱怨,/etc/php5/apache2/php.ini
会尽职地报告Xdebug已加载! (当作为扩展加载时,Xdebug 2.1会在phpinfo()
中发出一个小警告,但以前的版本什么都不做。)
答案 1 :(得分:0)
您必须将完整路径添加到xdebug.so
文件中,即使该文件位于php/modules/
文件夹中,因为zend_extension
未查看此文件默认情况下为文件夹。
如果你有一个exension=xdebug.so
行,xdebug会加载,但它不会在断点处停止(打败我的原因)。
删除所有exension=xdeabug.so
(即使是cli ini文件,也会加载)并添加zend_extension
将解决此问题。
答案 2 :(得分:0)
如果将php文件放入symlink-folder,则XDebug将使用源文件夹路径而不是symlink-folder路径运行!
因此,要启用断点,您应该在符号链接文件夹和文件的ide中配置路径映射
答案 3 :(得分:0)
我知道这已经得到了解答,但我遇到了同样的问题,只是想提供我的答案,如果有其他人遇到这个问题。我不小心错过了我的路径中的一个案例值,这仍然允许我连接并运行调试器,但它不会在我的断点处停止。直到很沮丧,我才意识到这一点,所以我只想让人们知道这也是一种可能性。
答案 4 :(得分:0)
就我而言,Eclipse无法获取调试信息,因此启用xdebug日志并检查响应,返回
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
,没有更多信息。
解决方法是更改调试配置
xdebug.remote_host=127.0.0.1 to
xdebug.remote_host=localhost
在/usr/local/etc/php/5.6/php.ini
然后重新启动Apache。
希望这会有所帮助
答案 5 :(得分:0)
我在Windows的Docker容器上遇到了这个问题。一切似乎配置正确,phpStorm正确侦听了127.0.0.1的本地端口9000。 phpinfo()显示了xdebug.so运行。当我从Web浏览器运行脚本时,调试器无法在breakopint上停止。 xdebug.log包含以下内容:
Log opened at 2019-07-02 08:17:10
I: Connecting to configured address/port: docker.for.mac.localhost:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///app/www/index.php" language="PHP" xdebug:language_version="7.2.15" protocol_version="1.0" appid="38768" idekey="PHPSTORM"><engine version="2.6.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2018 by Derick Rethans]]></copyright></init>
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
Log closed at 2019-07-02 08:17:10
我不得不ssh进入容器,以发现它没有从容器连接到托管该容器的Windows。问题是,我的docker compose配置包含docker.for.mac.localhost
,该配置将被设置为xdebug.remote_host
设置。即使xdebug.log声称xdebug已连接到客户端,实际上也没有连接。
解决方案为xdebug.remote_host = host.docker.internal
。
此主机名在Docker容器中用于与托管该容器的操作系统建立本地连接。