为什么XDebug忽略NetBeans 6.8中的断点


Why is XDebug ignoring breakpoints from NetBeans 6.8?

我在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中工作。