You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位代码中Doctrine MappingException的抛出位置?

Doctrine MappingException 定位与堆栈跟踪问题

问题分析

你遇到的MappingException提示找不到Client类,但当前的错误日志堆栈被截断了,没法直接定位到代码里到底哪一步触发了这个问题。先看你贴的报错信息:

[29-Mar-2019 22:30:26 Europe/Moscow] PHP Fatal error: Uncaught Doctrine\Common\Persistence\Mapping\MappingException: Class 'Client' does not exist in /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:93
Stack trace:
#0 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php(24): Doctrine\Common\Persistence\Mapping\MappingException::nonExistingClass('Client')
#1 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(251): Doctrine\Common\Persistence\Mapping\RuntimeReflectionService->getParentClasses('Client')
#2 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(284): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getParentClasses('Client')
#3 /var/www/virtual/account/htdocs/vendor/doctrine/orm/lib/Doc in /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php on line 93

关于你写的那段try-catch代码:它没法帮你拿到更完整的堆栈,因为问题出在PHP的日志长度限制上,不是捕获方式的问题。你用$e->getTraceAsString()获取的堆栈同样会被PHP的log_errors_max_len参数截断,最终得到的结果和现在的报错日志是一样的。

解决方案

后来你也找到了问题根源:这不是Doctrine的问题,是PHP默认配置里log_errors_max_len默认值为1024字节,超过这个长度的堆栈就会被截断。只需要在代码里添加一行配置,允许无限长度的错误日志:

ini_set('log_errors_max_len', 0); // 0代表不限制日志内容长度

设置之后,再触发异常就能拿到完整的堆栈跟踪,这样就能定位到代码里到底是哪一处引用了不存在的Client类了。

内容的提问来源于stack exchange,提问作者Andrey Lebedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:34:29