21

PhpUnit is currently not showing the stack trace for PHP errors that occur in the code.

How do I configure it to do so?

5
  • Can you provide some sample code as I'm not sure i understand you right. (it seems to work for me, maybe i misunderstood) Commented May 13, 2011 at 16:13
  • As in, I get a PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in file.php on line x, so I want to see its stack trace to see what's going on. PhpUnit is showing the final error and not the full trace. Commented May 13, 2011 at 16:32
  • @edorian: I've occasionally seen this happen when the phpunit's error handler chokes on recursively nested objects with references between one another. If it ends up running out of memory in the output buffer you can end up without a trace (though still an entry in the error log). Commented May 13, 2011 at 16:33
  • in my experience, you're going to need to follow code step by step in your situation. Commented May 13, 2011 at 16:35
  • jerry rig it to stop the code and stack trace when it reaches a certain condition. Commented May 13, 2011 at 18:09

2 Answers 2

9

PHPUnit uses an error handler function to trap and display errors, but from the PHP manual on error handlers,

The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

If you are running tests in a separate process, PHPUnit will get the error and message from the interpreter, but there will be no stack trace available. This is simply a limitation of the PHP interpreter. Fatal means fatal.

Sign up to request clarification or add additional context in comments.

Comments

3

This is a lame yet effective way that I've found to get a stack dump when php doesn't give one. I have this in a classed called DebugUtil.

        /**
         * This is for use when you have the UBER-LAME...
         * "PHP Fatal error:  Maximum function nesting level of '100' reached,
         * aborting!  in Lame.php(1273)
         * ...which just craps out leaving you without a stack trace.
         * At the line in the file where it finally spazzes out add
         * something like...
         * DebugUtil::dumpStack('/tmp/lame');
         * It will write the stack into that file every time it passes that
         * point and when it eventually blows up (and probably long before) you
         * will be able to see where the problem really is.
         */
        public static function dumpStack($fileName)
        {
            $stack = "";
            foreach (debug_backtrace() as $trace)
            {
                if (isset($trace['file'])  &&
                    isset($trace['line'])  &&
                    isset($trace['class']) &&
                    isset($trace['function']))
                {
                    $stack .= $trace['file']     . '#' .
                              $trace['line']     . ':' .
                              $trace['class']    . '.' .
                              $trace['function'] . "\n";
                }
            }
            file_put_contents($fileName, $stack);
        }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.