PHP 8.1.0 RC 2 available for testing

Exception::getTrace

(PHP 5, PHP 7, PHP 8)

Exception::getTraceRécupère la trace de la pile

Description

final public Exception::getTrace(): array

Retourne la trace de la pile de l'exception.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Retourne la trace de la pile de l'exception sous la forme d'un tableau.

Exemples

Exemple #1 Exemple avec Exception::getTrace()

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

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

Résultat de l'exemple ci-dessus est similaire à :

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

Voir aussi

add a note add a note

User Contributed Notes 5 notes

up
26
sam at notmyrealemail dot org
9 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
6
ronald at ronalddiaz dot net
1 year 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
11 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
3
knivey
8 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
0
an43 dot bal at gmail dot com
1 year 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