使用Xdebug和CakePHP时出现__调试信息错误4

zlhcx6iw  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(171)

我尝试在VSCode上使用XDebug来调试一个托管在本地Docker容器上的PHP 8.1 / CakePHP 4.3项目,但总是失败,并显示以下错误:

2022-05-25 12:11:36 error: [Cake\Error\FatalErrorException] __debuginfo() must return an array in /var/www/repo/public/vendor/cakephp/cakephp/src/ORM/BehaviorRegistry.php on line 78
Stack Trace:
- /var/www/repo/public/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.php:119
- [main] - [internal], line ??

这是我的launch.json配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "stopOnEntry": true,
            "pathMappings": {
              "/var/www/repo": "<path/to/my/local/project>"
             }
        },
   ]
}

如果我设置了"stopOnEntry": true,XDebug会正确地停在项目入口点的第一行(即webroot/index.php文件),但是当我到达$server->emit($server->run());行时,会出现错误。
如果我设置了"stopOnEntry": false,并在项目中的某个地方设置了断点(即Application.phpController/AppController.php),也是如此。无论我将断点放在哪里,我总是得到关于__debuginfo()的相同错误。
这是怎么回事?CakePHP与XDebug不兼容,是因为框架内部错误地使用了__debuginfo()吗?还是CakePHP 4实际上可以与XDebug一起工作,而我在自己的代码中做了一些错误的事情(尽管我不知道是什么或在哪里),错误只是令人费解的?有人有过让XDebug正确地在CakePHP 4项目上工作的经验吗?

vfh0ocws

vfh0ocws1#

因为框架在内部错误地使用了__debuginfo
是的,很可能是这样。
__debugInfo()必须传回数组。
Xdebug调用__debugInfo()来获取一些变量的信息。如果在脚本的正常执行过程中没有这样做,那么错误就不会出现,但是因为Xdebug确实使用了它,所以你会遇到这个问题。我建议你向Cake的人报告这个问题,因为这是他们唯一能解决的问题。

mrphzbgm

mrphzbgm2#

问题是您的PHP版本是8.1.x,而您使用的CakePHP版本假定是较旧的PHP版本,该版本对类型的类型强制更宽松。您有几种选择:

  • 您可以降级到旧版本的PHP
  • 您可以暂时在CakePHP中修复代码
  • 您可以向CakePHP发送错误报告,

在PHP 8.1.x中,: sometype规范是强制执行的,而以前没有强制执行。

相关问题