问题描述
我正在尝试在 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 吗?有任何想法吗?感谢您的帮助。
解决方法
我设法让它工作。 所以,这个想法是设置两个环境变量:
-
PHP_IDE_CONFIG="serverName=localhost"
,其中localhost
是您的 PhpStorm 设置中的服务器名称。 -
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 的说明。