Я ищу способ напечатать стек вызовов в PHP.
Бонусные баллы, если функция очищает буфер ввода-вывода.
php
stack-trace
error-logging
Джастин
источник
источник
Ответы:
Если вы хотите создать обратную трассировку, вы ищете
debug_backtrace
и / илиdebug_print_backtrace
.Первый, например, даст вам массив, подобный этому (цитируя руководство) :
Очевидно, они не очистят буфер ввода-вывода, но вы можете сделать это самостоятельно, с помощью
flush
и / илиob_flush
.(см. страницу руководства первой, чтобы узнать, почему "и / или" ;-))
источник
DEBUG_BACKTRACE_IGNORE_ARGS
параметров; что делает их функционально эквивалентными(new \Exception())->getTraceAsString()
Более читабельно, чем
debug_backtrace()
:источник
debug_backtrace
чтобы вернуть только первый уровень в трассировке стека - это решение работает для меня. Спасибо!print_r
сохранит все сообщения.Для записи трассировки
Спасибо @Tobiasz
источник
Backtrace сбрасывает много мусора, который вам не нужен. Это занимает очень много времени, трудно читать. Все, что вы обычно когда-либо хотите, это "что называется, откуда?" Вот простое решение статической функции. Я обычно помещаю его в класс под названием «отладка», который содержит все мои вспомогательные функции отладки.
Вы называете это так:
И это производит вывод как это:
источник
Странно, что никто так не писал
Это на самом деле печатает обратную трассировку без мусора - только то, что метод был вызван и где.
источник
Если вам нужна трассировка стека, которая очень похожа на то, как php форматирует трассировку стека исключений, используйте эту функцию, которую я написал:
Это вернет трассировку стека в следующем формате:
источник
$e = new Exception; echo $e->getTraceAsString();
Это делает то, что вы хотите?
источник
См
debug_print_backtrace
. Я думаю, вы можете позвонитьflush
потом, если хотите.источник
phptrace - отличный инструмент для печати стека PHP в любое время, когда вам нужно, без установки каких-либо расширений.
Существуют две основные функции phptrace: во-первых, стек вызовов PHP для печати, который не требует установки чего-либо, во-вторых, отслеживание потоков выполнения php, для которых необходимо установить расширение, которое оно предоставляет.
следующим образом:
источник
Используйте,
debug_backtrace
чтобы получить обратную информацию о том, какие функции и методы были вызваны и какие файлы были включены, что привело к точке, гдеdebug_backtrace
был вызван.источник
пожалуйста, посмотрите на этот класс утилит, может быть полезно:
Использование:
Исходный класс: https://github.com/augustowebd/utils/blob/master/Who.php
источник
debug_backtrace()
источник
Возможно, вы захотите посмотреть
debug_backtrace
, или, может бытьdebug_print_backtrace
.источник
Решение Walltearer превосходно, особенно если оно заключено в тег «pre»:
- который излагает звонки на отдельных линиях, аккуратно пронумерованных
источник
Я адаптировал ответ Дона Бриггса выше, чтобы использовать внутреннюю регистрацию ошибок вместо общедоступной печати, которая может быть вашей большой проблемой при работе на живом сервере. Кроме того, добавлено еще несколько модификаций, таких как опция, включающая полный путь к файлу вместо базового имени (потому что могут быть файлы с одинаковыми именами в разных путях), а также (для тех, кому это требуется) вывод полного стека узлов:
источник