我尝试在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.php
或Controller/AppController.php
),也是如此。无论我将断点放在哪里,我总是得到关于__debuginfo()
的相同错误。
这是怎么回事?CakePHP与XDebug不兼容,是因为框架内部错误地使用了__debuginfo()
吗?还是CakePHP 4实际上可以与XDebug一起工作,而我在自己的代码中做了一些错误的事情(尽管我不知道是什么或在哪里),错误只是令人费解的?有人有过让XDebug正确地在CakePHP 4项目上工作的经验吗?
2条答案
按热度按时间vfh0ocws1#
因为框架在内部错误地使用了__debuginfo
是的,很可能是这样。
__debugInfo()
必须传回数组。Xdebug调用
__debugInfo()
来获取一些变量的信息。如果在脚本的正常执行过程中没有这样做,那么错误就不会出现,但是因为Xdebug确实使用了它,所以你会遇到这个问题。我建议你向Cake的人报告这个问题,因为这是他们唯一能解决的问题。mrphzbgm2#
问题是您的PHP版本是8.1.x,而您使用的CakePHP版本假定是较旧的PHP版本,该版本对类型的类型强制更宽松。您有几种选择:
在PHP 8.1.x中,
: sometype
规范是强制执行的,而以前没有强制执行。