【问题标题】:How can I use XDebug with multiple servers?如何在多台服务器上使用 XDebug?
【发布时间】:2011-05-21 02:13:33
【问题描述】:

目前我正在学习一个大型代码库,其中涉及部署在多个(大约 9 个)物理服务器上的代码。由于整体架构的原因,我无法将代码汇总到一台具有许多虚拟主机的机器上。

我会发现能够在我的 IDE(NetBeans 或 Eclipse)中启动一个调试会话并在我的任何一组服务器上执行代码时命中断点非常有用。这可以通过浏览跨服务器或服务器代码中的 RPC/HTTP 调用来实现。

为了实现这一点,我认为我需要某种 dbgp 代理,它将在多个服务器之间转发调试数据(我在搜索中发现的标准 dbgp 代理方法是另一种方式 - 单个服务器上的多个用户)。

是否有现有的方法可以做到这一点?我是否错过了一些明显(或微妙)的东西,这意味着我需要的不仅仅是 dbgp 代理?


我知道Debugging 2 servers with php's Xdebug at the same time,但是这里的解决方案完全不合适...运行 8 台虚拟机(或获取 8 台客户端计算机)不是一个可行的选择


作为一个子问题,如果我最终推出自己的开源解决方案,人们会关心我使用什么语言吗? Java 似乎很适合 IDE 集成,C/C++ 对任何非 java-IDE 用户的依赖问题可能更少(可能是vim/xdebug

【问题讨论】:

    标签: php xdebug


    【解决方案1】:

    在我问这个问题的时候,我误解了协议是如何工作的,并且代理并不是绝对必要的。

    XDebug(和DBGP protocol)根据配置的 IP 地址或(最近但不推荐)客户端 IP 启动从服务器到客户端的连接。

    通过以下两种方式之一启用此行为:

    • ?XDEBUG_SESSION_START=<something> 附加到网址
    • 将cookie“XDEBUG_SESSION”设置为<something>

    虽然可以在浏览器和客户端之间有一个 HTTP 代理来插入其中一个(或一个浏览器插件来执行此操作),但对我来说更简洁的解决方案是在服务器上使用 mod_rewrite。

    RewriteEngine On
    
    RewriteCond %{HTTP_COOKIE} !XDEBUG_SESSION   [NC]
    RewriteRule ^(.*)$ $1?XDEBUG_SESSION_START=mod_rewrite [QSA,L]
    

    由于 mod_rewrite 通常在每个虚拟主机上运行,​​这需要在每个虚拟主机上启用。

    会话名称对于 NetBeans 似乎并不重要(其他 IDE 可能会有所不同),但可能值得将我的 mod_rewrite 值更改为您的 IDE 生成的任何值。如果使用 DBGP 代理,这不太可能起作用,因为没有简单的方法将 IDE 会话信息绑定到重写规则。

    也就是说,使用 mod_rewrite 而不是使用代理拦截请求的一大优势在于,这允许调试 RPC 调用的双方(尽管单个调试器是否喜欢多个并发连接是另一个问题)。

    如果有一个 DBGP 代理来管理来自不同服务器的流,通过将服务器名称添加到 init packets 的线程字段中来管理流仍然会很好,但是因为我还没有使用支持 PHP 的多个线程/服务器的调试器,这是一个有争议的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2017-02-18
      • 1970-01-01
      相关资源
      最近更新 更多