Xdebug 在 CLI 和 Lando 环境中不起作用

问题描述

我正在尝试在 Lando 环境中设置 CLI Xdebug。 它可以在 Web 上完美运行,但我无法使其从 CLI 运行以调试测试和脚本。

这是我的 .lando.yml 文件

var _ error = (*CustomError)(nil) // ensure CustomError implements error

type CustomError struct {
    msg string
}

func (e CustomError) Error() string {
    return e.msg
}

func main() {
    err := &CustomError{"Hello,world!"} // Methods return pointers to errors,allowing them to be nil
    
    var eval *CustomError

    as := errors.As(err,&eval) // yes,that's **CustomError
    asFaulty := errors.As(err,eval) // no compile error,so it wrongly seems okay
    is := errors.Is(err,eval) // that's just *CustomError

    fmt.Printf("as: %t,asFaulty: %t,is: %t",as,asFaulty,is) // as: true,asFaulty: false,is: true
}

我使用 PHPStorm 作为我的 IDE。我已经设置了服务器、服务器映射以及用于侦听的端口 9000 和 9003,但它仍然不会在断点处停止。 有人用 Lando 设置过 CLI Xdebug 吗?有任何想法吗?感谢您的帮助。

解决方法

我设法让它工作。 所以,这个想法是设置两个环境变量:

  1. PHP_IDE_CONFIG="serverName=localhost",其中 localhost 是您的 PhpStorm 设置中的服务器名称。

  2. XDEBUG_TRIGGER="1" - 此变量触发 xdebug。

但是我们如何动态地提供变量来让 XDEBUG_TRIGGER 只在你想要的时候工作?

对于这样的事情,Lando 有工具选项! 所以,我们可以创建自定义命令来让魔法发生,就像这样:

tooling:
  phpdebug:
    service: appserver
    cmd:
      - php
    env:
      XDEBUG_TRIGGER: 1
      PHP_IDE_CONFIG: "serverName=localhost"

然后重新启动(或重建)您的应用程序服务器,您将拥有一个全新的自定义命令,用于从 CLI 调试 PHP,如下所示:

lando phpdebug test.php

因此,它的工作原理与 lando php test.php 相同,但提供运行 Xdebug 所需的所有环境变量。

更新: 如果有人对如何从 Lando 环境调试 WP CLI 感兴趣:

lando phpdebug /app/vendor/wp-cli/wp-cli/bin/../php/boot-fs.php --version

所以,它与 lando wp --version 相同,但提供了 Xdebug 环境变量

P.S. 请注意 - 这是 Xdebug 3 的说明。