Chris B. Chris B. - 7 months ago 14
PHP Question

How do I track down an "Exception thrown without a stack frame in Unknown on line 0" in PHP?

I'm working on a large (inherited) codebase in PHP, and the error

Exception thrown without a stack frame in Unknown on line 0
has started showing up at the bottom of every page. I understand what the error means: an exception is getting thrown someplace it can't be thrown. I've even managed to track it down somewhat—it's happening during the time shutdown functions are being called.

I've put logging in all the functions which get registered with
register_shutdown_function
, and it's not happening in any of those. Unfortunately, I can't seem to get any more information than that; I know what the last shutdown function to get called successfully is, but I have no idea what code gets executed between that and the point where the error happens. I don't even know what part of the PHP machinery is calling that last shutdown function. It might be something with the logging framework, or the session framework, or anything of a half-dozen things.

Does anyone know how to pinpoint where the error is occurring?

jmz jmz
Answer

This can happen in destructors and exception handlers which don't have a stack frame. But since the message is so very helpful, your only option is to try to use echo to find the bug (and maybe ob_end_flush()). It may be that a destructor is throwing an exception, or is calling a function that throws an exception. Once you've located the buggy function, add a try...catch around the exception throwing part.

Note that if your framework uses it's own error handling, you have to turn of warnings and notices in the PHP configuration. Especially if you have something like this, since it turns warnings into exceptions.