我正在使用PHP中的大型(继承)代码库,并且错误Exception thrown without a stack frame in Unknown on line 0已经开始显示在每个页面的底部.我理解错误意味着什么:异常会在某个地方被抛出而无法抛出.我甚至设法跟踪它 - 它正在调用关闭函数期间发生.
我已经记录了所有注册的功能register_shutdown_function,并且在任何这些功能中都没有发生.不幸的是,我似乎无法获得更多信息; 我知道成功调用的最后一个关闭函数是什么,但我不知道在它和错误发生点之间执行了什么代码.我甚至不知道PHP机器的哪个部分正在调用最后一个关闭函数.它可能是日志框架,会话框架或其他任何东西的一部分.
有谁知道如何确定错误发生的位置?
这可能发生在没有堆栈帧的析构函数和异常处理程序中.但由于该消息非常有用,您唯一的选择是尝试echo用来查找错误(也许ob_end_flush()).可能是析构函数抛出异常,或者正在调用抛出异常的函数.一旦你找到了错误的功能,添加一个try ...捕捉异常抛出部分.
请注意,如果您的框架使用自己的错误处理,则必须在PHP配置中关闭警告和通知.特别是如果你有像ErrorException这样的东西,因为它会将警告变成异常.