Re: Backtrace in fatal error?
| From: | Richard Quadling | Date: | Wed, 01 Sep 2010 12:46:05 +0000 |
| Subject: | Re: Backtrace in fatal error? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-307804@lists.php.net to get a copy of this message | ||
On 1 September 2010 13:38, <freeman3@centrum.cz> wrote:
> 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 wrote:
>
>> On 31 August 2010 09:49, Paul Freeman <freeman3@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.
>>
>
>
> --
> 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.
--
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY