如何使用VSCode在Windows中的CLI上使用PHPUnit运行XDebug?

时间:2018-03-07 09:38:07

标签: php visual-studio-code xdebug

我跑了这个命令:

"C:\xampp\php\.\php.exe" "C:\xampp\php\phpunit" -d xdebug.profiler_enable=on -d xdebug.idekey=VSCODE

C:\ xampp \ php \ php.ini具有以下内容:

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug-2.5.0-7.1-vc14.dll"
xdebug.idekey=VSCODE
xdebug.profiler_enable=1
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

如果我在没有侦听XDebug的情况下运行命令,我将在命令行窗口中看到以下内容:

Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 3.7.21 by Sebastian Bergmann.

Configuration read from C:\xampp\apps\summit\htdocs\wp-content\plugins\hl-market-tracker\phpunit.xml.dist
...

我进入VSCode并侦听XDebug,当我运行命令时,我看到请求1和2出现在调用堆栈中但没有运行单元测试(它似乎挂在某处因为Installing...没有'甚至出现在命令行窗口中)。如果我停止侦听Xdebug,我将在调试控制台中看到read ECONNRESET,然后我将看到打印出Running as single site...语句(但不是Installing...语句)

问题

  1. 我想了解当我尝试运行单元测试时如何调试工作?

  2. 为什么我看到上面描述的挂起行为?我不明白的是什么?

  3. 参考

    1. https://pippinsplugins.com/unit-tests-wordpress-plugins-writing-tests/
    2. How can I get XDebug to run with PHPUnit on the CLI?
    3. https://tighten.co/blog/configure-vscode-to-debug-phpunit-tests-with-xdebug
    4. https://xdebug.org/docs/remote

2 个答案:

答案 0 :(得分:6)

回答#2 https://github.com/felixfbecker/vscode-php-debug/issues/164:描述的根本问题是当运行两个php进程时,它混淆了VS Code的调试器。当我读到这篇文章时,我认为是因为无论何时运行php,它都会从php.ini中读取并且文件告诉xdebug监听端口9000,这就是为什么如果运行两个php进程,XDebug会感到困惑。从那以后,我看到phpunit用phpunit选项启动php。然后我想用一个不同的远程端口启动这个特定的php,看它是否解决了悬挂问题,并且确实如此。

回答#1 :所以,在VS Code的launch.json中,

一个。添加另一个配置以在另一个端口(8000)上侦听XDebug

    "name": "PHPUnit",
    "type": "php",
    "request": "launch",
    "port": 8000

湾从命令行启动时使用此命令

"C:\xampp\php\.\php.exe" -d xdebug.remote_port=8000 "C:\xampp\php\phpunit"

或者,在phpunit.bat中更改它以便能够在命令行中键入phpunit

注意:

  1. 为xdebugSettings尝试--stderr,multiple_sessions launch.json,-d xdebug.profiler_enable = on -d xdebug.idekey = VSCODE, 等不起作用。
  2. 确保-d选项在phpunit选项之前,否则,它会认为它是phpunit而不是php的参数

答案 1 :(得分:1)

FWIW-在launch.json中设置以下内容适用于Ubuntu(通过apt安装XDebug):

    "configurations": [
    {
        "name": "Launch Unit Tests",
        "type": "php",
        "request": "launch",
        "program": "${workspaceFolder}/vendor/bin/phpunit",
        "cwd": "${workspaceFolder}",
        "env": {
            "XDEBUG_CONFIG": "idekey=VSCODE remote_enable=1 profile_enable=1"
        },
        "args": [
            // "--filter",
            // "testCanCreateValid"
        ],
        "port": 9000
    }
]