Exception::getTrace

(PHP 5, PHP 7, PHP 8)

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

Описание

final public Exception::getTrace(): array

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

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

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

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

Метод возвращает трассировку стека исключения в виде массива (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) {
    }
  }
}

Смотрите также

Добавить

Примечания пользователей 5 notes

up
28
sam at notmyrealemail dot org
13 years ago
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'.
up
8
ronald at ronalddiaz dot net
4 years ago
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 = OffSet this flag to On and it will show the args again.zend.exception_ignore_args = Onhttps://www.php.net/manual/en/ini.core.php#ini.zend.exception-ignore-args
up
3
knivey
12 years ago
The order of the trace starts at the source of the exception and does not include main.So for example:<?phpfunction 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) {    }  }}
up
4
andreas at cap-systems dot com
15 years ago
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();
up
0
an43 dot bal at gmail dot com
5 years ago
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).
To Top