如何在PHP中追踪“在0行的未知中没有堆栈帧的抛出异常”?

我正在使用PHP中的大型(继承)代码库,并且在第0行的Unknown中没有堆栈帧的错误Exception已经开始显示在每个页面的底部.我理解这个错误意味着什么:异常会在某个地方被抛出而无法抛出.我甚至设法在某种程度上跟踪它 – 它正在调用关闭函数期间发生.

我已经记录了使用register_shutdown_function注册的所有函数,并且在任何函数中都没有发生.不幸的是,我似乎无法获得更多信息;我知道成功调用的最后一个关闭函数是什么,但我不知道在它和错误发生点之间执行了什么代码.我甚至不知道PHP机器的哪个部分正在调用最后一个关闭函数.它可能是日志框架,会话框架或其他任何东西的一部分.

有谁知道如何确定错误发生的位置?

最佳答案
这可能发生在没有堆栈帧的析构函数和异常处理程序中.但由于该消息非常有用,您唯一的选择是尝试使用echo来查找错误(也许是ob_end_flush()).可能是析构函数抛出异常,或者正在调用抛出异常的函数.一旦你找到了buggy函数,添加一个try … catch抛出异常抛出部分.

请注意,如果您的框架使用自己的错误处理,则必须关闭PHP配置中的警告和通知.特别是如果你有像ErrorException这样的东西,因为它会将警告变成异常.

转载注明原文:如何在PHP中追踪“在0行的未知中没有堆栈帧的抛出异常”? - 代码日志