Exception::getTrace
(PHP 5, PHP 7, PHP 8)
Exception::getTrace — スタックトレースを取得する
パラメータ
この関数にはパラメータはありません。
戻り値
例外のスタックトレースを配列で返します。
例
例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) { } } }
+add a note
User Contributed Notes 5 notes
sam at notmyrealemail dot org ¶
12 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'.
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 = 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
andreas at cap-systems dot com ¶
14 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();
knivey ¶
11 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) {
}
}
}
an43 dot bal at gmail dot com ¶
4 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).
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google