PHP 8.6.0 Beta 1 is available for testing

debug_print_backtrace

(PHP 5, PHP 7, PHP 8)

debug_print_backtrace Выводит обратную трассировку вызовов функций

Описание

function debug_print_backtrace(int $options = 0, int $limit = 0): void

Функция debug_print_backtrace() выводит обратный стек вызовов PHP-функций. Функция выводит вызовы функций, названия файлов, которые подключили выражениями include или require , и другую информацию, которую вычислили функции, например eval() .

Список параметров

options

Параметр принимает битовую маску из следующих опций: Опции функции debug_print_backtrace()

DEBUG_BACKTRACE_IGNORE_ARGS Опция устанавливает бит, который определяет, исключать ли ключ "args" из выходного массива и вместе с ним аргументы функций и методов, чтобы уменьшить расход памяти.

limit

Параметр ограничивает количество кадров стека в выходном массиве. Со значением по умолчанию — limit=0 — возвращается весь стек вызовов функций.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Примеры

Пример #1 Пример вывода обратной трассировки вызовов функцией debug_print_backtrace()

<?php
// Файл: include.php
function a()
{
 b();
}
function b()
{
 c();
}
function c()
{
 debug_print_backtrace();
}
a();
?>
<?php
// Файл test.php
// Это файл, который потребуется запустить
include 'include.php';
?>

Вывод приведённого примера будет похож на:

#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]

Смотрите также

  • debug_backtrace() - Генерирует обратную трассировку вызовов функций

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 4 notes

up
91
bishop
17 years ago
Another way to manipulate and print a backtrace, without using output buffering:
<?php
// print backtrace, getting rid of repeated absolute path on each file
$e = new Exception();
print_r(str_replace('/path/to/code/', '', $e->getTraceAsString()));
?>
up
5
sun at drupal dot org
1 year ago
If you see string arguments and parameters getting cut off like this:
#0 hook.php(324): output_notice('checkout_before...')
#1 hook.php(348): invoke_hook('checkout_before...', Array)
You can increase the maximum length of arguments and parameters in the printed trace through an PHP INI setting:
<?php
ini_set('zend.exception_string_param_max_len', 100);
debug_print_backtrace();
?>

...so you can read the full arguments:
#0 hook.php(324): output_notice('checkout_before_payment')
#1 hook.php(348): invoke_hook('checkout_before_payment', Array)
In edge cases, it might even uncover nested traces that you didn't notice before.
up
25
dany dot dylan at gmail dot com
17 years ago
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().
<?php
 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);
 return $trace;
 }
?>
up
-2
David Spector
6 years ago
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 <BR> 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:<br>".nl2br((new Exception())->getTraceAsString());
 return false; // to execute the regular error handler
 }
set_error_handler("error_handler_callback");
+Добавить

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