我试图使用XDebug on VSCode来调试驻留在本地Docker容器上的PHP8.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项目的经验吗?
发布于 2022-05-25 12:30:52
,因为在内部框架不正确地使用__debuginfo
是的,很可能是这样。
__debugInfo()
必须返回一个数组。
Xdebug调用__debugInfo()
来获取某些变量的信息信息。如果在脚本的正常执行过程中没有完成,那么错误就不会出现,但是因为Xdebug确实使用了它,所以您会遇到这样的情况。我建议你向“蛋糕人”报告这件事,因为这只是他们能解决的问题。
发布于 2022-05-25 14:19:54
问题是,您的PHP是8.1.x,您使用的CakePHP版本假设是一个较旧的PHP版本,该版本对类型的类型强制执行更为宽松。你有几种选择:
发送错误报告
对于PHP8.1.x,: sometype
规范是强制执行的,以前没有强制执行它们。
https://stackoverflow.com/questions/72377650
复制相似问题