【问题标题】:How to trigger XDebug profiler for a command line PHP script?如何为命令行 PHP 脚本触发 XDebug 探查器?
【发布时间】:2011-01-18 07:38:49
【问题描述】:

XDebug 提供配置指令xdebug.profiler_enable_trigger,当通过 HTTP 调用脚本时,它允许通过传递 GET 或 POST 参数“XDEBUG_PROFILE”来激活分析。如果您不想对所有脚本进行分析,而只是针对少数特殊情况而不总是更改 PHP 配置,这将非常方便。

有没有办法为命令行 PHP 程序实现相同的行为?我尝试将XDEBUG_PROFILE 作为命令行参数传递,但没有成功。

一般来说,分析命令行 PHP 效果很好,但我希望拥有与浏览器和 HTTP 服务器相同的每次调用灵活性。

【问题讨论】:

  • 对不起,我也在尝试这个,但我不明白。 “XDEBUG_PROFILE”参数应该是什么?
  • 参数中的内容无关紧要,只要它存在即可。
  • 缺乏对 XDEBUG_PROFILE environment variable 的支持是 XDebug 错误跟踪器中的错误 413。

标签: php configuration command-line profiling xdebug


【解决方案1】:

欢迎使用 xdebug 3!

现在是:

xdebug.mode=profile

因此:

php -d xdebug.mode=profile script.php

【讨论】:

    【解决方案2】:

    对于 Xdebug 3

    现在,使用XDEBUG_MODE environment variable 可以轻松地为单个脚本启用 Xdebug:

    XDEBUG_MODE=profile php script_to_be_profiled.php
    

    【讨论】:

      【解决方案3】:

      Xdebug Remote Debugging 页面所述,还可以通过XDEBUG_CONFIG 环境变量通过引入“profile_enable=1”指令来启用分析:

      XDEBUG_CONFIG="profiler_enable=1" php ...
      

      为了方便使用,上面的命令行可以写成别名:

      alias xphp='XDEBUG_CONFIG="profiler_enable=1" php'
      

      别名可以添加到您的 shell 的(交互式)启动脚本之一,例如 ~/.bash_aliases~/.bashrc(根据您的系统而定)。

      【讨论】:

      • 这应该是公认的答案,因为它是最容易获得的方法。 PHP 二进制文件可能被包装,它可能被设置为解释器 #!/x/php 在你不想接触的地方。使用 env 变量可以有选择地启用它
      【解决方案4】:

      Documentation from Jetbrains

      使用 PHP 命令行开关启动脚本并进行调试 设置一个环境变量,告诉 XDebug 连接到 IDE:

      Windows / MacOS / Linux

      export XDEBUG_CONFIG="idekey=123"  
      

      这里的idekey应该有一个随机值。

      使用以下命令行选项启动 PHP:

      php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php
      

      您可以在 Vagrant 中使用 10.0.2.2 而不是 127.0.0.1(请参阅相关的 SO 问题)。

      【讨论】:

        【解决方案5】:

        我创建了一个 shell 脚本来处理客户端调试。

        脚本名称:phpdebug

        #!/usr/bin/ksh
        php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*
        

        我把这个脚本放在/usr/bin 中并赋予它执行权限。

        脚本接受传递给 phpdebug 的参数,并使用 xdebug 参数调用 php,并将传递给 shell 脚本的参数附加到末尾,$*。

        【讨论】:

        • 是的,在我的情况下,我所需要的只是为我的远程主机添加 INI 设置。这就是在我的 IDE 中通过 PHP CLI 命令进行调试所需的全部内容。
        • 其实我还需要设置XDEBUG_CONFIG环境变量。就是这样,xdebug.remote_host 设置使它起作用。
        【解决方案6】:

        在 VM 上进行开发时使其与 Netbeans 一起工作的类似但不同的过程。

        需要传入远程启用标志、自动启动标志、ide 标志和远程主机的名称。

        php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php
        

        【讨论】:

          【解决方案7】:

          在使用 WAMP 的 PhpStorm 7 中,我通过将我已经工作的 xdebug 设置从 C:\wamp\bin\apache\apache2.2.22\bin\php.ini 复制到 C:\wamp\bin 的 xdebug 部分来实现此功能\php\phpX.YZ\php.ini。然后我像这样运行我的脚本:

          php -d xdebug.idekey=PHPSTORM script.php
          

          这甚至可以用于调试 laravel artisan 脚本

          php -d xdebug.idekey=PHPSTORM artisan db:seed --force
          

          【讨论】:

            【解决方案8】:

            在远程网络服务器上使用 PhpStorm 我使用以下命令:

            XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php
            

            其中server_name代表PhpStorm项目配置中的服务器名称

            【讨论】:

            • 我将此添加到 .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $SSH_CLIENT |剪切 -d \"=\" -f 2 | awk '{print $1}'" 所以当我想调试时我使用 xphp 而不是 php
            【解决方案9】:

            我通过以下方式在 Ubuntu/Netbeans 上工作:

            • 将 xdebug 配置行从 /etc/php5/apache2/php.ini 文件复制到 /etc/php5/cli/php.ini
            • 使用调试会话的名称设置环境变量(您可以从开始调试时 netbeans 启动的页面的 url 中的查询字符串中获取)命令是:export XDEBUG_CONFIG="idekey=netbeans-xdebug"

            那么就简单的在netbeans中开始调试,在命令行中做“php myscript.php”。

            【讨论】:

            • 注意:完成后,如果您希望调试器继续监听而不是使用 PHP 命令触发它,您可以使用:“unset XDEBUG_CONFIG”。
            • 这实际上对我有用,而上面的答案不是;-)
            • 这是关于调试(逐步执行脚本)。问题是关于分析(分析脚本的性能、哪些功能需要很长时间等)
            • 在 WSL 上,在 /etc/php/<version>/cli/php.ini 中配置 xdebug 对我有用。
            【解决方案10】:

            您可以使用 -d 标志传递 INI 设置:php -d xdebug.profiler_enable=On script.php

            【讨论】:

            • 在基于 *nix 的系统上,您可以通过创建别名使其更易于使用,例如:alias phpp="php -d xdebug.profiler_enable=1"。这样,当您不想进行分析时,只需使用 php,而当您确实使用 phpp
            • 我必须指定我希望将分析器输出保存在哪个目录中,所以这对我来说很醒:alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=."。这始终将调试输出存储在您当前的工作目录中。
            • 是的,我在 Win7 环境中的 Eclipse 和 XAMPP 下。它有效。
            • 在 Windows 上,您可以在 PATH 目录中创建一个 phpp.cmd 文件,其中包含 php -d xdebug.profiler_enable=On %* 然后您可以简单地运行 phpp <args>
            • 您也可以将参数添加到 Shebang-command 的文件中,例如 #!/usr/bin/php -d xdebug.start_with_request=On
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-12
            • 2011-04-24
            • 1970-01-01
            • 1970-01-01
            • 2015-11-11
            • 2011-12-25
            • 1970-01-01
            相关资源
            最近更新 更多