[PHP] Backtrace in fatal error?

2010-09-01 Thread Paul Freeman
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



[PHP] Backtrace in fatal error?

2010-09-01 Thread Paul Freeman
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



Re: [PHP] Backtrace in fatal error?

2010-09-01 Thread Simon J Welsh
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





--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Backtrace in fatal error?

2010-09-01 Thread Richard Quadling
On 31 August 2010 09:49, Paul Freeman freem...@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

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Backtrace in fatal error?

2010-09-01 Thread freeman3
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 freem...@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



Re: [PHP] Backtrace in fatal error?

2010-09-01 Thread Richard Quadling
On 1 September 2010 13:38,  freem...@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 freem...@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

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php