使用 Netbeans 和 XDebug 进行远程 PHP 调试

Posted

技术标签:

【中文标题】使用 Netbeans 和 XDebug 进行远程 PHP 调试【英文标题】:Remote PHP Debugging with Netbeans and XDebug 【发布时间】:2012-04-06 18:33:58 【问题描述】:

我正在尝试在以下场景中使用 XDebug

Windows 7 上的物理主机,带有 Netbeans 7.1.1 Ubuntu 上的虚拟客户机,带有 Apache 服务器和 php 5.3.10 我网站的 PHP 代码位于 Ubuntu 上的共享文件夹中,位于 /var/www/mysite 可以从我的 Windows 主机访问 PHP 代码,在 \\guestIP\mysite 上,具有 R/W 权限 主机和访客均可通过http://mysite.local.fr 访问网站

我从我的 Windows 主机创建了一个 Netbeans 项目,指向 \\guestIP\mysite。 在项目运行配置中,我有以下内容:

运行方式:本地网络服务器 项目网址:http://mysite.local.fr 索引文件:index.php(项目中确实存在)

在高级运行配置中:

我检查了“每次都询问”(我也尝试使用“请勿询问”并自己使用会话密钥启动浏览器) 我尝试设置 '/var/www/mysite' - \\GuestIP\mysite 进行映射(也尝试不使用任何内容) 我没有动过代理设置

我的 Ubuntu VM 上的 php.ini 中有以下内容

xdebug.remote_enable = on
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = /tmp
;xdebug.remote_host=localhost,<HostIP>, mysite.local.fr
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
xdebug.idekey="netbeans-xdebug"
xdebug.remote_mode=req

这些都不起作用,Netbeans 不会在 Windows 的任何断点处停止。

使用 Netbeans 直接从我的 VM 调试工作正常。

谁能告诉我如何让我的调试器从 Windows 远程工作? 谢谢

【问题讨论】:

你有想过这个吗?我的配置几乎完全相同,也无法触发断点。 【参考方案1】:

对不起,我不能再评论了。 @David @JamesB41:我也一直在寻找这个。我的设置是带有 NetBeans 7.1 的 Windows 7 主机和 VirtualBox 中的 Ubuntu VM。我将 NetBeans 项目设置为远程项目,使用 SFTP 上传和下载。

以下设置适用于我,只需使用您主机的 IP 作为 remote_host,并确保 VM 可以看到它。

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=10.217.165.193
xdebug.remote_port=9000
xdebug.remote_log="/tmp/log/xdebug.log"

NetBeans 将在入口断点处停止(如果您在 PHP->Debugging 中设置了选项)。 但是,它不会在 NetBeans 创建的断点上停止,因为它会运行 VM 的文件。不过,您可以使用 xdebug_break(),它会显示堆栈和变量。 如果您在项目配置 > 运行配置 > 高级中正确映射文件夹,它将在 NetBeans 断点处停止并突出显示。惊人的。我已经完成了。

connect_back 配置似乎没有帮助,可能是因为未填充 $_SERVER['REMOTE_ADDR']。)

【讨论】:

【参考方案2】:

通过以下文档使用 NetBeans 进行远程调试。非常有帮助。 http://stuporglue.org/setting-up-xdebug-with-netbeans-on-windows-with-a-remote-apache-server/

【讨论】:

【参考方案3】:

知道这是旧的但很好的提醒。如果您在 virtualbox 中使用 nat,请确保您将 xdebug 端口上的端口转发设置回本地机器,默认情况下通常为 9000。

【讨论】:

【参考方案4】:

另一种选择是将虚拟机配置为与自己的 localhost:9000(xdebug 的默认值)通信,然后从主机 ssh 进入虚拟机,并为该端口建立一个端口隧道返回主机。然后你的主机调试器简单地连接到 localhost:9000 并且一切都应该像在同一台机器上运行一样工作。

见:Multiple users XDebug and PHP Debugging

【讨论】:

【参考方案5】:

使用 Linux + Apache + PHP + xdebug + NetBeans (SFTP) 远程调试

我已经进行了以下设置,并且可以正常工作。

主机 PC(客户端)

Linux Debian Jessie ** NetBeans 8.0.2 版 NetBeans 有一个项目创建为“来自远程的 PHP 应用程序 服务器”,必须调试 NetBeans 使用 SFTP 连接到远程服务器 IP(例如):192.168.0.2

** 我知道 OP 问题提到了 Windows,但是关于解决这个问题的主要设置应该在 VM 上进行,我希望这对某人有帮助。

来宾 PC(服务器)/虚拟机

Linux Debian Jessie 阿帕奇 PHP 5.6 xdebug 2.2.5 IP(例如):192.168.0.1

应在“Guest PC(服务器)/虚拟机”上进行以下步骤

    安装xdebugsudo apt-get install php5-xdebug 编辑/etc/php5/apache2/php.ini,

[Date] 之前添加这些行并更改xdebug.remote_host 以反映您的“主机PC(客户端)”IP:

[debug]
; Remote settings
xdebug.remote_autostart=off
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=192.168.0.2
xdebug.remote_port=9000
    重启apachesudo service apache2 restart

参考

如何配置XDebug - 远程调试http://wiki.netbeans.org/HowToConfigureXDebug#Remote_Debuging

您需要正确配置属性 xdebug_remote.host on 远程机器。本地机器的IP地址必须定义在 这个性质。例如,你想调试你的源代码 远程机器 192.168.0.1 使用安装在 192.168.0.2 上的 Netbeans。 您需要将 192.168.0.1 上的 xdebug.remote_host 更改为 xdebug.remote_host=192.168.0.2。如果不起作用,请验证您是否有端口 在两台机器上打开的 xdebug.remote_port 中配置。

【讨论】:

有时我真的很想说 - 这他妈的是什么。我过去曾多次这样做,但这次它不起作用。将 xdebug.remote_host=xxx.xxx.xxx.xxx 更改为主机 IP 地址,它神奇地开始工作!【参考方案6】:

如果一切似乎都是正确的,但你仍然从 netbeans 中得到“等待连接”,你应该在你的 php.ini 设置中尝试

xdebug.remote_connect_back=on

因为它允许从任何 ip 进行连接,或者查看有关问题的更多信息http://www.devside.net/wamp-server/netbeans-waiting-for-connection-netbeans-xdebug-issue

【讨论】:

以上是关于使用 Netbeans 和 XDebug 进行远程 PHP 调试的主要内容,如果未能解决你的问题,请参考以下文章

NetBeans配置Xdebug 远程调试PHP

使用 Netbeans 8.0 和 xampp 1.8.3 进行 Xdebug

远程服务器的 Xdebug 未连接

netbeans 和 xdebug 与 laravel

Netbeans xDebug 仅在 Mac 上运行一次

Xdebug 和 Netbeans 没有相互通信