我的问题:
当我从我的一个php页面启动Eclipse的调试配置时,该页面在Chrome中成功打开,但Eclipse调试器冻结了57%(在Eclipse的右下角)并且从未进一步发展。永远不会达到设定的断点。
我的设置:
我在MAMP中的虚拟主机设置工作正常。以下是有关Xdebug设置的屏幕截图:
我怀疑问题是由我的虚拟主机引起的。两个虚拟主机位于“/ Applications / MAMP / htdocs / ledworld”和“/ Applications / MAMP / htdocs / sandbox”下。我目前正在尝试调试沙箱项目。
如果您可以提供有关我应该对附加的屏幕截图进行哪些更改的详细说明,或者有关如何进行此设置的分步说明,这将非常棒!
答案 0 :(得分:1)
以下是其他任何坚持这一点的完整解决方案:
/Applications/MAMP/bin/php/<your_php_version>/conf/php.ini
的底部应如下所示:
[xdebug]
zend_extension="/Applications/MAMP/bin/php/<your_php_version>/lib/php/extensions/no-debug-non-zts-<timestamp>/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=sandbox
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.idekey=ECLIPSE_DBGP
xdebug.remote_log=/tmp/xdebug.log
请注意,然后xdebug.remote_host
选项设置为您为虚拟主机指定的名称。所以在我的情况下,我的httpd-vhosts.conf文件将包含这样的条目
<VirtualHost *:80>
ServerName sandbox
DocumentRoot /Applications/MAMP/htdocs/sandbox/
<Directory /Applications/MAMP/htdocs/sandbox/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
我的/private/etc/hosts
文件会有这样的条目
127.0.0.1 sandbox
从Eclipse方面来看,这就是你应该做的事情。
配置Eclipse的XDebug调试器。确保所选端口与上面的php.ini文件中指定的端口匹配
如果您希望外部程序触发调试会话(例如Chrome Xdebug帮助程序扩展程序),请确保将“Accept remote session(JIT)”设置为“localhost”。
Eclipse首选项 - &gt; PHP-&gt; Debug-&gt;已安装的调试器 - &gt; XDebug-&gt; Configure-&gt;
在Eclipse中添加新的或编辑现有的PHP可执行文件:
确保“可执行路径”和“php.ini文件”字段指向MAMP正在使用的相同版本的PHP(MAMP-&gt;首选项...-&gt; PHP-&gt; PHP版。您。可能不需要也填写“php.ini文件”字段,但我仍然这样做。
Eclipse首选项 - &gt; PHP-&gt; PHP可执行文件 - &gt;添加/修改
在Eclipse中设置服务器:
我在MAMP下使用HTTP端口80用于Apache(MAMP-&gt; Preferences ...-&gt; Ports-&gt; Apache Port)。如果您使用差异端口,请确保将其包含在此屏幕的“基本URL”的末尾。
Eclipse首选项 - &gt; PHP-&gt; PHP服务器 - &gt;新建/修改
创建一个新的Eclipse调试配置,如下所示:
“PHP Server”应设置为您在上面创建的服务器。应将“文件”设置为要在项目中调试的php文件。如果“URL”字段未显示您希望在浏览器中输入加载PHP文件的内容(即http://<virtual_host>/path/to/file/being/debugged.php
,则取消选中“自动生成”框并手动修改“URL”的第二部分字段,以便完整的URL是您所期望的。不要忘记添加PHP脚本期望在$ _GET变量中找到的任何查询参数。
调试配置的“调试器”选项卡应如下所示:
确保“Server Debugger”设置为XDebug。我喜欢取消选中“Break at First Line”选项,因为我觉得总是在第一行代码中断是很烦人的。而是使用断点来控制调试器停止的位置。
这就是你应该做的一切。快乐的调试! :)