调试递归代码:如何增加Codeception堆栈跟踪的调用显示数量?
解决Codeception堆栈跟踪显示条数限制的问题
从你的描述和提供的Xdebug配置来看,xdebug.max_stack_frames已经设为-1(无限制),所以问题确实出在Codeception自身对堆栈跟踪的截断机制上。下面给你几个可行的解决办法:
方法1:修改Codeception全局配置
在项目根目录的codeception.yml,或者对应测试套件的配置文件(比如tests/unit.suite.yml)中,添加error_handler配置项,通过maxTraceLines参数设置你需要的堆栈行数:
error_handler: maxTraceLines: 100 # 可根据需求设置更大数值,比如200
保存配置后重新运行测试,就能看到完整的递归调用堆栈了。
方法2:单测试用例临时调整
如果只需要针对当前调试的测试临时修改,可以在测试类的setUp方法中手动调整ErrorHandler的参数:
public function setUp() { parent::setUp(); $errorHandler = \Codeception\Subscriber\ErrorHandler::getInstance(); $errorHandler->setMaxTraceLines(100); // 设置你需要的行数 }
这种方式不用改动全局配置,适合临时调试特定测试场景。
补充说明
Codeception的默认堆栈跟踪行数限制是10,这就是你只看到最后10条调用的原因。调整上述配置后,就能完整看到递归代码的执行路径,帮你定位DateTimeImmutable无法转为字符串的具体触发点。
内容的提问来源于stack exchange,提问作者CJ Dennis
相关产品推荐
相关产品推荐

