Skip to main content

PhpUnit not showing a stack trace for a php fatal error


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



How do I configure it to do so?


Source: Tips4allCCNA FINAL EXAM

Comments

  1. 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.

    ReplyDelete
  2. 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);
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.