Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: [PHP] Backtrace in fatal error?

0 views
Skip to first unread message

Simon J Welsh

unread,
Sep 1, 2010, 5:33:48 AM9/1/10
to free...@centrum.cz, php-g...@lists.php.net
I think you need a PHP extension to do this. XDebug works rather nicely for this.
On 31/08/2010, at 8:49 PM, Paul Freeman wrote:

> When fatal error occurs is it possible to output also the backtrace in the error log? The simple error message with file line
> only is quite useless...
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>

---
Simon Welsh
Admin of http://simon.geek.nz/

Who said Microsoft never created a bug-free program? The blue screen never, ever crashes!

http://www.thinkgeek.com/brain/gimme.cgi?wid=81d520e5e


Paul Freeman

unread,
Aug 31, 2010, 4:49:44 AM8/31/10
to php-g...@lists.php.net

Paul Freeman

unread,
Sep 1, 2010, 5:01:03 AM9/1/10
to php-g...@lists.php.net

Richard Quadling

unread,
Sep 1, 2010, 6:30:46 AM9/1/10
to free...@centrum.cz, php-g...@lists.php.net
On 31 August 2010 09:49, Paul Freeman <free...@centrum.cz> wrote:
> When fatal error occurs is it possible to output also the backtrace in the error log? The simple error message with file line
> only is quite useless...

<?php
namespace baz;

set_error_handler(
function($ErrNo, $ErrStr, $ErrFile, $ErrLine, $ErrContext){
echo 'An error occurred.', PHP_EOL;
var_export(debug_backtrace(true));

// Allow PHP to continue executing.
return false;
},
-1
);

register_shutdown_function(
function(){
echo 'We died a terrible death.';
var_export(debug_backtrace(true));
}
);

function bar() {
echo 'In ', __FUNCTION__, PHP_EOL;
echo 1 / 0; // Divide by zero warning.
foo();
}

function foo() {
echo 'In ', __FUNCTION__, PHP_EOL;
$a = \SNAFU; // Fatal error
}

bar();
?>
outputs ...

In baz\bar
An error occurred.
array (
0 =>
array (
'file' => 'Z:\\bad.php',
'line' => 24,
'function' => 'baz\\{closure}',
'args' =>
array (
0 => 2,
1 => 'Division by zero',
2 => 'Z:\\bad.php',
3 => 24,
4 =>
array (
),
),
),
1 =>
array (
'file' => 'Z:\\bad.php',
'line' => 33,
'function' => 'baz\\bar',
'args' =>
array (
),
),
)
Warning: Division by zero in Z:\bad.php on line 24
In baz\foo

Fatal error: Undefined constant 'SNAFU' in Z:\bad.php on line 30
We died a terrible death.array (
0 =>
array (
'function' => 'baz\\{closure}',
'args' =>
array (
),
),
)

So, it looks like extension or a core mod only.

--
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

free...@centrum.cz

unread,
Sep 1, 2010, 8:38:42 AM9/1/10
to php-g...@lists.php.net
Thanks!
I didn't notice the register_shutdown_function function.
But it executes always I want to run it only to track fatal error. Also I
can't get the backtrace properly:( I can't use 5.3 so I guess it works
differently in 5.2

Richard Quadling

unread,
Sep 1, 2010, 8:46:05 AM9/1/10
to free...@centrum.cz, php-g...@lists.php.net
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

No. I think you've missed the point. Neither set_error_handler() or
register_shutdown_function() report the fatal stack.

This would need to be in an extension or a mod to the core code.

Userland code can't access it.

The stack trace shown in the shutdown function is just the shutdown
function, not why there is a shutdown.

0 new messages