【问题标题】:Trying to debug phpunit unit test on cli using xdebug fails尝试使用 xdebug 在 cli 上调试 phpunit 单元测试失败
【发布时间】:2013-06-11 09:52:34
【问题描述】:

我正在使用配置为使用 xDebug 的 PHPStorm(我可以通过 Web 浏览器进行调试)

我在 idekey 为 11854 的 PHPStorm 中运行调试器,我正在尝试调试单元测试,并且我已正确设置断点

所以我通过cli执行了这个命令:

phpunit -d xdebug.profiler_enable=on -d xdebug.idekey=11854 --filter testFunction s_function/sFunctionTest.php

尽管如此,它不会相应地在断点处调试...

当我尝试在测试脚本中执行此操作时:

error_log(ini_get('xdebug.profiler_enable'));
error_log(ini_get('xdebug.idekey'));

它会显示 xdebug.profiler_enable 为 0 而 xdebug.idekey 只是我的用户名。

我做错了什么以及如何通过 cli 让 xdebug 在 phpunit 上工作

【问题讨论】:

  • 如果您能够在 PhpStorm 中以 CLI 模式 调试普通脚本 .. 然后使用 PHPUnit 执行相同操作:创建 PHPUnit 类型的运行/调试配置,填写所有必需项字段,以便您可以在 PHPUnit 中运行它 .. 而不是“运行”使用“调试”按钮。

标签: php debugging phpunit xdebug phpstorm


【解决方案1】:

您只是将参数设置为 phpunit,而不是 PHP。以下应该做你想做的事:

php -d xdebug.profiler_enable=on -d xdebug.idekey=11854 `which phpunit` --filter testFunction s_function/sFunctionTest.php

【讨论】:

  • 您能否显示运行此命令后预期输出的屏幕截图?
  • 你应该解释一下你使用什么以及为什么使用参数?
【解决方案2】:

xdebug docs 给出了一个看起来更简单的解决方案...

export XDEBUG_CONFIG="idekey=session_name"
php myscript.php

设置该变量后,您可以正常从命令行运行脚本(针对该 SSH 会话),PHP 将使用此配置。

还要注意:

您还可以配置 xdebug.remote_host、xdebug.remote_port、 xdebug.remote_mode 和 xdebug.remote_handler 在同一个环境中 变量,只要用空格分隔值即可

【讨论】:

    【解决方案3】:

    在 Ubuntu 中调试 CLI 我发现让它工作的唯一方法是将以下内容添加到您的 ~/.bashrc 文件中

    export PHP_IDE_CONFIG='serverName=localhost'
    export XDEBUG_CONFIG='idekey=PHPSTORM'
    

    替换idekey=??在您的示例中为 11854。 请务必启动一个新的控制台会话,以便使用变量。

    【讨论】:

      【解决方案4】:

      我在这里尝试一种非常不同的设置。我在 dockers 中运行我的应用程序,并且我有一个与在生产环境中运行的容器非常相似的容器。因此,要在我的开发环境中使用 xdebug 运行 php,我必须使用 xdebug 参数和 PHPStorm 变量设置别名。

      $ alias php=`which php`' \
          -d xdebug.idekey=xdbg \
          -d xdebug.remote_enable=1 \
          -d xdebug.remote_connect_back=1 \
          -d xdebug.remote_autostart=1 \
          -d xdebug.remote_port=9000 \
          -d xdebug.remote_host=172.17.0.1 \
          -d xdebug.remote_handler=dbgp'
      
      $ export PHP_IDE_CONFIG="serverName=localapp.docker"
      

      在这个不漂亮的技巧之后,我可以在 PHPStorm 上设置断点并从命令行运行 phpunit。

      $ php ../../bin/phpunit --verbose
      

      以上所有命令都在容器内运行。 localapp.docker 是我的容器的地址,是主机的硬编码/etc/hosts

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 1970-01-01
        相关资源
        最近更新 更多