mougrim/php-xdebug-proxy

Xdebug (dbgp) 代理

0.5.0 2022-02-05 21:08 UTC

README

这是一个基于 amphp 的可扩展的 dbgp xdebug 代理,使用的是您所熟悉的语言 - PHP。

该想法在文档 在 PhpStorm 中使用 Xdebug 和 DBGp 代理进行多用户调试 中进行了描述。

主要优势是此代理是用 PHP 编写的 - 您所熟悉的语言。

Latest Stable Version Latest Unstable Version License Unit tests status

安装

此软件包可以作为 Composer 项目或依赖项安装。

composer.phar create-project mougrim/php-xdebug-proxy

或者作为依赖项

composer.phar require mougrim/php-xdebug-proxy --dev

为了解析 XML,您应该安装 ext-dom

为了默认情况下写入日志,您应该安装 amphp/log(如果将 php-xdebug-proxy 作为依赖项安装,请使用 --dev

composer.phar require amphp/log '^1.0.0'

运行

您可以使用以下命令

bin/xdebug-proxy

代理将使用默认配置运行

Using config path /path/to/php-xdebug-proxy/config
[2019-02-14 10:46:24] xdebug-proxy.NOTICE: Use default ide: 127.0.0.1:9000 array ( ) array ( )
[2019-02-14 10:46:24] xdebug-proxy.NOTICE: Use predefined ides array (   'predefinedIdeList' =>    array (     'idekey' => '127.0.0.1:9000',   ), ) array ( )
[2019-02-14 10:46:24] xdebug-proxy.NOTICE: [Proxy][IdeRegistration] Listening for new connections on '127.0.0.1:9001'... array ( ) array ( )
[2019-02-14 10:46:24] xdebug-proxy.NOTICE: [Proxy][Xdebug] Listening for new connections on '127.0.0.1:9002'... array ( ) array ( )

因此,默认情况下,代理监听 127.0.0.1:9001 以接受 IDE 注册连接,并监听 127.0.0.1:9002 以接受 xdebug 连接,使用 127.0.0.1:9000 作为默认 IDE 和具有键 idekey 的预定义 IDE。

配置

如果您想配置监听端口等,您可以使用自定义配置路径。只需将 config 目录复制到您的自定义路径即可

cp -r /path/to/php-xdebug-proxy/config /your/custom/path

这里有 3 个文件

  • config.php:
    <?php
    return [
        'xdebugServer' => [
            // xdebug proxy server host:port
            'listen' => '127.0.0.1:9002',
        ],
        'ideServer' => [
            // if proxy can't find ide, then it uses default ide,
            // pass empty string if you want to disable default ide
            // defaultIde is useful when there is only one user for proxy
            'defaultIde' => '127.0.0.1:9000',
            // predefined ide list in format 'idekey' => 'host:port',
            // pass empty array if you don't need predefined ide list
            // predefinedIdeList is useful when proxy's users aren't changed often,
            // so they don't need to register in proxy each proxy restart
            'predefinedIdeList' => [
                'idekey' => '127.0.0.1:9000',
            ],
        ],
        'ideRegistrationServer' => [
            // host:port for register ide in proxy
            // pass empty string if you want to disable ide registration
            'listen' => '127.0.0.1:9001',
        ],
    ];
  • logger.php:您可以自定义一个记录器,该文件应返回一个对象,它是 \Psr\Log\LoggerInterface 的实例;
  • factory.php:您可以为代理中使用的类进行自定义,该文件应返回一个对象,它是 Factory\Factory 的实例。

然后更改配置并运行

bin/xdebug-proxy --configs=/your/custom/path/config

扩展

如上所述,您可以使用实现 Factory\Factory 的自定义工厂来自定义类。默认情况下使用 Factory\DefaultFactory 工厂。

最强大的是请求准备器。您可以覆盖 Factory\DefaultFactory::createRequestPreparers()。它应返回一个实现 RequestPreparer\RequestPreparer 接口的对象数组。

请求准备器将在以下情况下被调用

  • 在从 IDE 发送请求时,从第一个到最后一个
  • 在从 xdebug 发送请求时,从最后一个到第一个

您可以使用请求准备器,例如,更改文件路径(在断点和执行文件中)。

请求准备器的一个好例子是 RequestPreparer\SoftMocksRequestPreparer。您可以在 Factory\SoftMocksFactory 中看到其使用方法。

与软模拟一起使用

对于软模拟,您可以使用softMocksConfig配置目录。

bin/xdebug-proxy --configs=/path/to/php-xdebug-proxy/softMocksConfig

如果您想提供自定义软模拟初始化脚本的路径,请复制softMocksConfig并修改config.php

...
    'softMocks' => [
        // if empty string, then vendor/badoo/soft-mocks/src/init_with_composer.php is used
        'initScript' => '/your/custom/init-script.php',
    ],
...

有关更多信息,请参阅软模拟项目中的文档。

谢谢

特别感谢Eelf提供的代理示例smdbgpproxy

感谢Dmitry Ananyev在文档方面的帮助。