Exception::getTrace

(PHP 5 >= 5.1.0, PHP 7)

Exception::getTraceПолучает трассировку стека

Описание

final public array Exception::getTrace ( void )

Возвращает трассировку стека исключения.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает трассировку стека исключения в виде массива (array).

Примеры

Пример #1 Пример использования Exception::getTrace()

<?php
function test() {
 throw new 
Exception;
}

try {
 
test();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

Результатом выполнения данного примера будет что-то подобное:

array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(22) "/home/bjori/tmp/ex.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(4) "test"
    ["args"]=>
    array(0) {
    }
  }
}

Коментарии

When calling getTrace(), there is also the name of the class in returned array:

<?php
 
class Test {

    function 
__construct() {

      throw new 
Exception('FATAL ERROR: bla bla...');

    }

  }

  try {

   
$obj = new Test();

  } catch(
Exception $e) {

   
var_dump($e->getTrace());

  }
?>

Will show something like:

array(1) { 
  [0]=>  array(6) { 
               ["file"]=>  string(54) "/....../test.php" 
               ["line"]=>  int(37) 
               ["function"]=>  string(11) "__construct" 
               ["class"]=>  string(4) "Test" 
               ["type"]=>  string(2) "->" 
               ["args"]=>  array(0) { } 
             } 


You can use this function to format a exception:

<?php
 
function MakePrettyException(Exception $e) {
   
$trace $e->getTrace();

   
$result 'Exception: "';
   
$result .= $e->getMessage();
   
$result .= '" @ ';
    if(
$trace[0]['class'] != '') {
     
$result .= $trace[0]['class'];
     
$result .= '->';
    }
   
$result .= $trace[0]['function'];
   
$result .= '();<br />';

    return 
$result;
  }

 
//Example:
 
try {

   
$obj = new Test();

  } catch(
Exception $e) {

    echo 
MakePrettyException($e);

  }

?>

Result:

Exception: "FATAL ERROR: bla bla..." @ Test->__construct();
2010-06-09 15:55:28
http://php5.kiev.ua/manual/ru/exception.gettrace.html
Two important points about this function which are not documented:

1) The trace does not include the file / line at which the exception is thrown; that entry is only recorded in the top-level getFile/Line methods.

2) Elements are returned in 'closest-first' order, e.g. if you have a script x which calls function y which calls function z which throws an exception, then the first trace element will be 'Y' and the second will be 'X'.
2012-02-17 17:26:48
http://php5.kiev.ua/manual/ru/exception.gettrace.html
Автор:
The order of the trace starts at the source of the exception and does not include main.
So for example:

<?php
function Bar() {
 throw new 
Exception;
}

function 
Foo() {
 
Bar();
}

try {
 
Foo();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

Will output:

array(2) {
  [0]=>
  array(4) {
    ["file"]=>
    string(21) "/.../test.php"
    ["line"]=>
    int(8)
    ["function"]=>
    string(3) "Bar"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(21) "/.../test.php"
    ["line"]=>
    int(12)
    ["function"]=>
    string(3) "Foo"
    ["args"]=>
    array(0) {
    }
  }
}
2013-04-18 17:53:19
http://php5.kiev.ua/manual/ru/exception.gettrace.html
As of PHP 7.4 return values of Exception::getTrace() (and Error::getTrace()) no longer contains "args" keys like debug_backtrace() with default options.

So, return value since 7.4 is like debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS).
2020-05-17 18:01:29
http://php5.kiev.ua/manual/ru/exception.gettrace.html
If you are wanting to see the args within a stack trace on PHP 7.4, note that there is now a zend flag in the php.ini file that is default set to Off.

zend.exception_ignore_args = Off

Set this flag to On and it will show the args again.

zend.exception_ignore_args = On

https://www.php.net/manual/en/ini.core.php#ini.zend.exception-ignore-args
2020-08-18 01:30:52
http://php5.kiev.ua/manual/ru/exception.gettrace.html

    Поддержать сайт на родительском проекте КГБ