我在Ubuntu 1004笔记本电脑上运行PHP 5.3.2、Apache 2.2.14和xdebug 2.2.0rc1,我正试图在Netbeans 6.8中的localhost上设置调试。
我的问题是我在Netbeans中设置的断点被忽略了。否则,它似乎工作正常。例如,我得到了漂亮的var_dumps、xdebug跟踪、xdebog远程日志,我还可以勾选方框,使其在PHP脚本的第一行中断。
根据其他网站和SO问题(例如SO1、SO2、SO3),我检查了以下所有内容:
- 正在使用我正在编辑的php.ini文件
- 该xdebug加载为zend_extension=/full/path/to/xdebug.so(而不是extension=xdebug.seo)
- PHP中禁用了线程安全,我使用的是非线程安全版本的xdebug
-
断点的路径在xdebug远程日志中是正确的(请参阅此列表下面的代码片段,该片段中的路径和其他未显示的路径是正确的)
<- breakpoint_set -i 1014 -t line -s enabled -f file:///var/www/mockup/test.php -n 8 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1014" state="enabled" id="135610002"></response>
-
手动调用xdebug_break()工作
我还尝试在Netbeans项目属性中设置服务器路径和项目路径,因为感觉这可能是问题所在,但没有帮助。目前我的服务器路径为/var/www/mockup
,项目路径为/common/rsync/Dropbox/active-archives/code/Locus/mockup
然而,/var/www/mockup
无论如何都是较长路径的符号链接,所以我甚至不知道这是否有必要?无论我是否指定路径映射,它都不起作用。。。
基于@Derick的输入,有效的解决方案是:
- 更改NetBean项目属性以将文件从源文件夹复制到
/var/www/Locus
- 从运行配置中删除所有路径映射
- 将浏览器指向
localhost/Locus/
换句话说,造成问题的不仅仅是源文件路径中的符号链接,还有服务器路径中的信号链接。
Xdebug(通过PHP)还不支持符号链接(在http://bugs.xdebug.org/view.php?id=627)。PHP/Xdebug总是使用完全扩展的链接,所以你需要确保netbeans设置了一个断点,比如:
breakpoint_set -i 1014 -t line -s enabled -f file:///common/rsync/Dropbox/active-archives/code/Locus/mockup/test.php
您必须设置路径映射。在验证了breakpoint_set包含正确的路径之后,它应该可以工作了。
以下是我修复它的方法:
在我的mac上的本地examplep环境中,我设置了一个vhost,它映射到apache根目录(/source/my_project)之外的一个目录。我在NetBeans中的项目也被设置为使用/source/My_project作为项目的位置。所以我"没有"URL映射问题,因为我在Apache vhost中使用的路径与我在Net Beans中使用的没有什么不同。或者,Apache认为这个目录与NetBeans不同——无论如何,我都无法获得路径映射。但是,当我将/source/my_project移动到/apache/htdocs/my_project,并将该路径用于NetBeans的项目源,并将我的vhost映射到该目录时,调试器就工作了。附言:我在/source/my_project上设置了版本控制,所以我把my_project改成了一个符号链接,它仍然可以在subversion中工作。