update page now

Exception::getTrace

(PHP 5, PHP 7, PHP 8)

Exception::getTraceGets the stack trace

Description

final public Exception::getTrace(): array

Returns the Exception stack trace.

Parameters

This function has no parameters.

Return Values

Returns the Exception stack trace as an array .

Examples

Example #1 Exception::getTrace() example

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

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

The above example will output something similar to:

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

See Also

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 5 notes

up
39
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
24
ronald at ronalddiaz dot net
5 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 = 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 
up
5
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
2
knivey
12 years ago
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) {
 }
 }
}
up
-2
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).
+add a note

AltStyle によって変換されたページ (->オリジナル) /