Печатать PHP Call Stack - PullRequest
       23

Печатать PHP Call Stack

230 голосов
/ 14 сентября 2009

Я ищу способ напечатать стек вызовов в PHP.

Бонусные баллы, если функция очищает буфер ввода-вывода.

Ответы [ 15 ]

2 голосов
/ 11 марта 2016

пожалуйста, посмотрите на этот класс утилит, может быть полезно:

Использование:

<?php
/* first caller */
 Who::callme();

/* list the entire list of calls */
Who::followme();

Исходный класс: https://github.com/augustowebd/utils/blob/master/Who.php

1 голос
/ 20 сентября 2017

Отличное решение Walltearer, особенно если оно заключено в тег 'pre':

<code><pre>
<?php debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); ?>

- который устанавливает вызовы на отдельных линиях, аккуратно пронумерованных

1 голос
/ 14 сентября 2009

Возможно, вы захотите взглянуть на debug_backtrace или, возможно, debug_print_backtrace.

1 голос
/ 14 сентября 2009

debug_backtrace()

0 голосов
/ 15 февраля 2019

Я приспособил ответ Дона Бриггса выше , чтобы использовать внутреннюю регистрацию ошибок вместо общедоступной печати, что может быть вашей большой проблемой при работе на живом сервере. Кроме того, добавлено еще несколько модификаций, таких как опция, включающая полный путь к файлу вместо базового имени (потому что могут быть файлы с одинаковым именем в разных путях), а также (для тех, кому это требуется) вывод полного стека узлов:

class debugUtils {
    public static function callStack($stacktrace) {
        error_log(str_repeat("=", 100));
        $i = 1;
        foreach($stacktrace as $node) {
            // uncomment next line to debug entire node stack
            // error_log(print_r($node, true));
            error_log( $i . '.' . ' file: ' .$node['file'] . ' | ' . 'function: ' . $node['function'] . '(' . ' line: ' . $node['line'] . ')' );
            $i++;
        }
        error_log(str_repeat("=", 100));
    } 
}

// call debug stack
debugUtils::callStack(debug_backtrace());
...