- PHP debug_backtrace() Function
- Syntax
- Parameter Values
- Technical Details
- COLOR PICKER
- Report Error
- Thank You For Helping Us!
- debug_print_backtrace
- Parameters
- Return Values
- Examples
- See Also
- User Contributed Notes 5 notes
- debug_backtrace
- Parameters
- Return Values
- Examples
- See Also
- debug_backtrace
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
PHP debug_backtrace() Function
The debug_backtrace() function generates a PHP backtrace.
This function displays data from the code that led up to the debug_backtrace() function.
Returns an array of associative arrays. The possible returned elements are:
- Returns: «->» — Method call
- Returns: «::» — Static method call
- Returns nothing — Function call
Syntax
Parameter Values
Parameter | Description |
---|---|
options | Optional. Specifies a bitmask for the following options: DEBUG_BACKTRACE_PROVIDE_OBJECT (Whether or not to populate the «object» index DEBUG_BACKTRACE_IGNORE_ARGS (Whether or not to omit the «args» index, and all the function/method arguments, to save memory) |
limit | Optional. Limits the number of stack frames printed. By default (limit=0) it prints all stack frames |
Technical Details
Return Value: | An array of associative arrays |
---|---|
PHP Version: | 4.3+ |
PHP Changelog: | PHP 5.4: The optional parameter limit was added PHP 5.3.6: The parameter provide_object was changed to options and additional option DEBUG_BACKTRACE_IGNORE_ARGS is added PHP 5.2.5: The optional parameter provide_object was added PHP 5.1.1: Added the current object as a possible return element |
PHP Error Reference
COLOR PICKER
Report Error
If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top Tutorials
Top References
Top Examples
Get Certified
W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.
debug_print_backtrace
debug_print_backtrace() prints a PHP backtrace. It prints the function calls, included/required files and eval() ed stuff.
Parameters
This parameter is a bitmask for the following options:
DEBUG_BACKTRACE_IGNORE_ARGS | Whether or not to omit the «args» index, and thus all the function/method arguments, to save memory. |
This parameter can be used to limit the number of stack frames printed. By default ( limit = 0 ) it prints all stack frames.
Return Values
Examples
Example #1 debug_print_backtrace() example
function c () debug_print_backtrace ();
>
// test.php file
// this is the file you should run
?php
The above example will output something similar to:
#0 c() called at [/tmp/include.php:10] #1 b() called at [/tmp/include.php:6] #2 a() called at [/tmp/include.php:17] #3 include(/tmp/include.php) called at [/tmp/test.php:3]
See Also
User Contributed Notes 5 notes
Another way to manipulate and print a backtrace, without using output buffering:
// print backtrace, getting rid of repeated absolute path on each file
$e = new Exception ();
print_r ( str_replace ( ‘/path/to/code/’ , » , $e -> getTraceAsString ()));
?>
I like the output of debug_print_backtrace() but I sometimes want it as a string.
bortuzar’s solution to use output buffering is great, but I’d like to factorize that into a function. Doing that however always results in whatever function name I use appearing at the top of the stack which is redundant.
Below is my noddy (simple) solution. If you don’t care for renumbering the call stack, omit the second preg_replace().
function debug_string_backtrace () <
ob_start ();
debug_print_backtrace ();
$trace = ob_get_contents ();
ob_end_clean ();
// Remove first item from backtrace as it’s this function which
// is redundant.
$trace = preg_replace ( ‘/^#0\s+’ . __FUNCTION__ . «[^\n]*\n/» , » , $trace , 1 );
// Renumber backtrace items.
$trace = preg_replace ( ‘/^#(\d+)/me’ , ‘\’#\’ . ($1 — 1)’ , $trace );
If your show your error messages in HTML (with suitable safety using entities), this function won’t work nicely because it uses newlines for formatting.
Here is a function that works similarly, but using tags. Insert it near the beginning of your program to add a stack to Warning output only, or modify it as you like:
// Here is code for error stack output in HTML:
function error_handler_callback($errno,$message,$file,$line,$context)
if ($errno === E_WARNING)
echo «Stack, innermost first:
«.nl2br((new Exception())->getTraceAsString());
return false; // to execute the regular error handler
>
set_error_handler(«error_handler_callback»);
Here’s a function that returns a string with the same information shown in debug_print_backtrace(), with the option to exclude a certain amount of traces (by altering the $traces_to_ignore argument).
I’ve done a couple of tests to ensure that it prints exactly the same information, but I might have missed something.
This solution is a nice workaround to get the debug_print_backtrace() information if you’re already using ob_start() in your PHP code.
function get_debug_print_backtrace ( $traces_to_ignore = 1 ) $traces = debug_backtrace ();
$ret = array();
foreach( $traces as $i => $call ) if ( $i < $traces_to_ignore ) continue;
>
$object = » ;
if (isset( $call [ ‘class’ ])) $object = $call [ ‘class’ ]. $call [ ‘type’ ];
if ( is_array ( $call [ ‘args’ ])) foreach ( $call [ ‘args’ ] as & $arg ) get_arg ( $arg );
>
>
>
$ret [] = ‘#’ . str_pad ( $i — $traces_to_ignore , 3 , ‘ ‘ )
. $object . $call [ ‘function’ ]. ‘(‘ . implode ( ‘, ‘ , $call [ ‘args’ ])
. ‘) called at [‘ . $call [ ‘file’ ]. ‘:’ . $call [ ‘line’ ]. ‘]’ ;
>
function get_arg (& $arg ) if ( is_object ( $arg )) $arr = (array) $arg ;
$args = array();
foreach( $arr as $key => $value ) if ( strpos ( $key , chr ( 0 )) !== false ) $key = » ; // Private variable found
>
$args [] = ‘[‘ . $key . ‘] => ‘ . get_arg ( $value );
>
$arg = get_class ( $arg ) . ‘ Object (‘ . implode ( ‘,’ , $args ). ‘)’ ;
>
>
?>
debug_backtrace
debug_backtrace() generates a PHP backtrace.
Parameters
This parameter is a bitmask for the following options:
DEBUG_BACKTRACE_PROVIDE_OBJECT | Whether or not to populate the «object» index. |
DEBUG_BACKTRACE_IGNORE_ARGS | Whether or not to omit the «args» index, and thus all the function/method arguments, to save memory. |
Note:
There are four possible combinations:
debug_backtrace() options
debug_backtrace() Populates both indexes debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT) debug_backtrace(1) debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS & DEBUG_BACKTRACE_PROVIDE_OBJECT) Omits index «object» . debug_backtrace(0) debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) Omits index «object» and index «args» . debug_backtrace(2)
This parameter can be used to limit the number of stack frames returned. By default ( limit = 0 ) it returns all stack frames.
Return Values
Returns an array of associative array s. The possible returned elements are as follows:
Name | Type | Description |
---|---|---|
function | string | The current function name. See also __FUNCTION__. |
line | int | The current line number. See also __LINE__. |
file | string | The current file name. See also __FILE__. |
class | string | The current class name. See also __CLASS__ |
object | object | The current object. |
type | string | The current call type. If a method call, «->» is returned. If a static method call, «::» is returned. If a function call, nothing is returned. |
args | array | If inside a function, this lists the functions arguments. If inside an included file, this lists the included file name(s). |
Examples
Example #1 debug_backtrace() example
function a_test ( $str )
echo «\nHi: $str » ;
var_dump ( debug_backtrace ());
>
a_test ( ‘friend’ );
?>
// filename: /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>
Results similar to the following when executing /tmp/b.php :
Hi: friend array(2) < [0]=>array(4) < ["file"] =>string(10) "/tmp/a.php" ["line"] => int(10) ["function"] => string(6) "a_test" ["args"]=> array(1) < [0] =>&string(6) "friend" > > [1]=> array(4) < ["file"] =>string(10) "/tmp/b.php" ["line"] => int(2) ["args"] => array(1) < [0] =>string(10) "/tmp/a.php" > ["function"] => string(12) "include_once" > >
See Also
debug_backtrace
debug_backtrace() выводит стек вызовов функций PHP в массив.
Список параметров
В версии 5.3.6, этот аргумент является битовой маской для следующих настроек:
DEBUG_BACKTRACE_PROVIDE_OBJECT | Требуется или нет заполнять данные «объектов». |
DEBUG_BACKTRACE_IGNORE_ARGS | Требуется или нет не выводить данные с индексом «args», то есть списки аргументов всех функций/методов, для уменьшения расхода памяти. |
До версии 5.3.6 принимаются только значения TRUE или FALSE , которые означают, задана настройка DEBUG_BACKTRACE_PROVIDE_OBJECT или нет соответственно.
В версии 5.4.0, этот аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit =0) будет выведен весь стек вызовов.
Возвращаемые значения
Возвращает массив вложенных ассоциативных массивов ( array ). Описание элементов массива приведено ниже:
Имя | Тип | Описание |
---|---|---|
function | string | Имя текущей функции. См. также __FUNCTION__. |
line | integer | Текущий номер строки. См. также __LINE__. |
file | string | Имя текущего файла. См. также __FILE__. |
class | string | Имя текущего класса. См. также __CLASS__ |
object | object | Текущий объект. |
type | string | Текущий тип вызова функции. Если это вызов метода объекта, будет выведено «->». Если это вызов статического метода класса, то «::». Если это простой вызов функции, не выводится ничего. |
args | array | При нахождении внутри функции, будет выведен список аргументов этой функции. Если внутри включаемого файла, будет выведен список включаемых файлов. |
Список изменений
Версия | Описание |
---|---|
5.4.0 | Добавлен необязательный аргумент limit . |
5.3.6 | Аргумент provide_object заменен на options и добавлена дополнительная настройка DEBUG_BACKTRACE_IGNORE_ARGS . |
5.2.5 | Добавлен необязательный аргумент provide_object . |
5.1.1 | Элементом возвращаемого массива теперь может быть текущий объект object . |
Примеры
Пример #1 Пример использования debug_backtrace()
function a_test ( $str )
echo «\nHi: $str » ;
var_dump ( debug_backtrace ());
>
a_test ( ‘friend’ );
?>
// filename: /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>
Результат аналогичен приведенному ниже, если запустить /tmp/b.php :
Hi: friend array(2) < [0]=>array(4) < ["file"] =>string(10) "/tmp/a.php" ["line"] => int(10) ["function"] => string(6) "a_test" ["args"]=> array(1) < [0] =>&string(6) "friend" > > [1]=> array(4) < ["file"] =>string(10) "/tmp/b.php" ["line"] => int(2) ["args"] => array(1) < [0] =>string(10) "/tmp/a.php" > ["function"] => string(12) "include_once" > >
Смотрите также
- trigger_error() — Вызывает пользовательскую ошибку/предупреждение/уведомление
- debug_print_backtrace() — Выводит стек вызовов функций