【问题标题】:How can I debug a PHP CLI script with xdebug?如何使用 xdebug 调试 PHP CLI 脚本?
【发布时间】:2010-12-29 04:15:22
【问题描述】:

我还没有完全弄清楚这一点。我发现的每篇文档都涵盖了如何使用 xdebug 来调试在 Apache 中运行的脚本。我需要调试一个 php CLI 脚本。

那么,例如,我如何传递 XDEBUG_SESSION_START 变量以启动 xdebug?

我专门尝试调试 CakePHP shell。因此,如果有人对此有任何额外的见解,我将不胜感激。

谢谢。

【问题讨论】:

标签: cakephp xdebug php


【解决方案1】:

Xdebug's manual 中有一些关于此的注释,例如(引用):

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

如果您使用 Eclipse PDT 开发和调试 PHP 脚本,Apache 或 CLI 之间没有太大区别:配置完全相同,您不必配置 Web 服务器,也无需指定 URL ;相反,您必须指明 PHP 可执行文件的路径。

关于XDEBUG_SESSION_START 变量:嗯,你在“调试模式”下启动整个脚本,所以你没有任何“调试会话”的概念,我会说。


例如,这就是我现在看到的Window > Preference > PHP > PHP executables 的样子,右边是我点击第一个按钮的Edit 时得到的结果:


(来源:pascal-martin.fr

(来源:pascal-martin.fr

还有debug configurations 窗口:


(来源:pascal-martin.fr

并启动调试:它可以正常工作:


(来源:pascal-martin.fr


希望这会有所帮助:-)

否则,您遇到了什么具体问题?

【讨论】:

    【解决方案2】:

    如果您使用 bash(或类似的 shell),这个小脚本可能会派上用场:

    alias drush-debug=drd
    function drd {
        export XDEBUG_CONFIG="idekey=cli_session"
        export SERVER_NAME="developer.machine"
        export SERVER_PORT="9000"
        drush "$@"
        unset XDEBUG_CONFIG
        unset SERVER_NAME
        unset SERVER_PORT
    };
    

    或按照以下评论员的建议

    alias drd='XDEBUG_CONFIG="idekey=PHPSTORM" drush "$@"'
    

    这样您就不必在每次要调试时手动设置和取消设置触发器变量。

    【讨论】:

    • 这在逻辑上等同于将环境变量与 bash 中的命令放在同一行,即:“XDEBUG_CONFIG='idekey=cli_session' drush $*”。不需要设置然后取消设置变量的函数,shell会自动将变量导出到命令。
    • @Stabledog 但是,如果我没记错的话,如果它们没有取消设置,xDebug 将为当前 shell 中的所有后续 drush 命令启用。这个函数背后的想法是暂时启用 PHP CLI 调试,但它有它的警告。
    • @Plamen 请改用drush "$@"。 bash 将用引号扩展每个参数,以便 drush-debug cc "theme registry" 可以工作。这不是 bash 最直观的方面,但很高兴拥有。
    • @Stabledog 我相信你的话。但是,我发现键入drd 比每次调用命令时都预先添加一堆变量要容易得多。
    • @Stabledog 是正确的:您只需要alias drd='XDEBUG_CONFIG="idekey=PHPSTORM" drush "$@"'。请注意,变量赋值和 drush 调用之间没有分号。该变量将仅在 drush 调用期间设置,不会导出到 shell。
    【解决方案3】:

    只需将以下部分放到您的 php.ini 中

    [XDebug]
    xdebug.max_nesting_level = 200
    xdebug.remote_enable=1
    xdebug.remote_port=9000
    ;xdebug.profiler_enable=1
    xdebug.idekey=PHPSTORM
    xdebug.remote_autostart=1
    

    并用您的 ide 密钥替换 PHPSTORM

    【讨论】:

      【解决方案4】:

      对于 Windows 和 Visual Studio Code,以下是如何继续:

      1. https://xdebug.org/download 下载 xdebug。例如php 7.4 Windows 64bit https://xdebug.org/files/php_xdebug-2.9.5-7.4-vc15-nts-x86_64.dll

      2. 将 xdebug dll 复制到您的 php 扩展目录 (ext)。

      3. 添加到 php.ini 的末尾

          [XDebug]
          zend_extension=php_xdebug-2.9.5-7.4-vc15-nts-x86_64.dll
      
          xdebug.remote_enable=1
          xdebug.remote_autostart=1
      
      1. 打开 VSCode 并安装 https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug

      2. 在 VSCode 中打开项目工作区,转到“运行”选项卡,单击齿轮并添加这些行

          {
            "name": "listen CLI",
            "type": "php",
            "request": "launch",
            "port": 9000
          },
          {
            "name": "run CLI",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
          }
      
      1. 在要调试的脚本中放置断点

      2. 选择“运行CLI”并点击“开始调试”

      调试愉快!

      【讨论】:

      • 谢谢。这帮助我设置了我的 VSC Powershell 正在访问的 php.ini。缺少 php.ini 是“xdebug.remote_enable=1”,之后调试器在我的 VSC 中与 PHPUnit 一起正常工作。
      猜你喜欢
      • 2011-02-26
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 2011-06-20
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多