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 个注释

sam at notmyrealemail dot org
12 年前
关于此函数的两个重要点未记录

1) 跟踪不包括抛出异常的文件/行;该条目仅记录在顶层的 getFile/Line 方法中。

2) 元素以“最靠近优先”的顺序返回,例如,如果您有一个脚本 x 调用函数 y,函数 y 调用函数 z,函数 z 抛出异常,那么第一个跟踪元素将是“Y”,第二个将是“X”。
ronald at ronalddiaz dot net
3 年前
如果您想在 PHP 7.4 上查看堆栈跟踪中的参数,请注意,php.ini 文件中现在有一个 zend 标志,默认设置为 Off。

zend.exception_ignore_args = Off

将此标志设置为 On,它将再次显示参数。

zend.exception_ignore_args = On

https://php.net/manual/en/ini.core.php#ini.zend.exception-ignore-args
andreas at cap-systems dot com
14 年前
调用 getTrace() 时,返回的数组中还包含类的名称

<?php
class Test {

function
__construct() {

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

}

}

try {

$obj = new Test();

} catch(
Exception $e) {

var_dump($e->getTrace());

}
?>

将显示类似于

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) { }
}
}

您可以使用此函数来格式化异常

<?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);

}

?>

结果

Exception: "FATAL ERROR: bla bla..." @ Test->__construct();
knivey
11 年前
跟踪的顺序从异常源开始,不包括 main。
例如

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

function
Foo() {
Bar();
}

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

将输出

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 年前
从 PHP 7.4 开始,Exception::getTrace()(以及 Error::getTrace())的返回值不再包含像 debug_backtrace()(使用默认选项)那样的“args”键。

因此,从 7.4 开始的返回值就像 debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)。
To Top