debug print backtrace php

debug_print_backtrace

debug_print_backtrace — Выводит стек вызовов функций

Описание

debug_print_backtrace() выводит стек вызовов функций. Выводит вызовы функций, имена включённых/требуемых файлов и другую информацию из функций ( eval() ).

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

Аргумент является битовой маской для следующих настроек:

Опции debug_print_backtrace()
DEBUG_BACKTRACE_IGNORE_ARGS Нужно ли исключить ключ «args», то есть списки аргументов всех функций/методов, чтобы уменьшить расход памяти.

Аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit = 0 ) будет выведен весь стек вызовов.

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

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

Примеры

Пример #1 Пример использования debug_print_backtrace()

function c () <
debug_print_backtrace ();
>

Результатом выполнения данного примера будет что-то подобное:

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

User Contributed Notes 5 notes

Another way to manipulate and print a backtrace, without using output buffering:

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 ();

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»);

This code will give you a simple horizontal stack trace to assist debugging:

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.

Источник

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

debug_backtrace — Выводит стек вызовов функций в массив

Описание

debug_backtrace() выводит стек вызовов функций PHP в массив.

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

В версии 5.4.0, этот аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit =0) будет выведен весь стек вызовов.

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

Возвращает массив вложенных ассоциативных массивов ( array ). Описание элементов массива приведено ниже:

Читайте также:  практика по кормлению сельскохозяйственных животных

Список возможных значений элементов массивов, возвращаемых функцией debug_backtrace()

Имя Тип Описание
function string Имя текущей функции. См. также __FUNCTION__.
line integer Текущий номер строки. См. также __LINE__.
file string Имя текущего файла. См. также __FILE__.
class string Имя текущего класса. См. также __CLASS__
object object Текущий объект.
type string Текущий тип вызова функции. Если это вызов метода объекта, будет выведено «->». Если это вызов статического метода класса, то «::». Если это простой вызов функции, не выводится ничего.
args array При нахождении внутри функции, будет выведен список аргументов этой функции. Если внутри включаемого файла, будет выведен список включаемых файлов.

Список изменений

Примеры

Пример #1 Пример использования debug_backtrace()

a_test ( ‘friend’ );
?>

// filename: /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>

Результат аналогичен приведенному ниже, если запустить /tmp/b.php :

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

Источник

debug_backtrace

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

debug_backtrace — Выводит стек вызовов функций в массив

Описание

debug_backtrace() выводит стек вызовов функций PHP в массив.

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

Аргумент является битовой маской для следующих настроек:

Опции debug_backtrace()
DEBUG_BACKTRACE_PROVIDE_OBJECT Нужно ли заполнять данные для ключа object.
DEBUG_BACKTRACE_IGNORE_ARGS Нужно ли исключить аргументы всех функций/методов в ключе «args» для уменьшения расхода памяти.

Аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit = 0 ) будет выведен весь стек вызовов.

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

Возвращает массив вложенных ассоциативных массивов ( array ). Описание элементов массива приведено ниже:

Список возможных элементов массивов, возвращаемых функцией debug_backtrace()

Имя Тип Описание
function string Имя текущей функции. Смотрите также __FUNCTION__.
line int Текущий номер строки. Смотрите также __LINE__.
file string Имя текущего файла. Смотрите также __FILE__.
class string Имя текущего класса. Смотрите также __CLASS__
object object Текущий объект.
type string Текущий тип вызова функции. Если это вызов метода объекта, будет выведено «->». Если это вызов статического метода класса, то «::». Если это простой вызов функции, не выводится ничего.
args array При нахождении внутри функции, будет выведен список аргументов этой функции. Если внутри включаемого файла, будет выведен список включаемых файлов.

Примеры

Пример #1 Пример использования debug_backtrace()

a_test ( ‘друг’ );
?>

// файл /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>

Результат аналогичен приведённому ниже, если запустить /tmp/b.php :

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

User Contributed Notes 36 notes

Here’s a function I just wrote for getting a nice and comprehensible call trace. It is probably more resource-intensive than some other alternatives but it is short, understandable, and gives nice output (Exception->getTraceAsString()).

$test = new ParentClass ();
?>

Output:

array(1) <
[0]=>
array(7) <
[«file»]=>
string(23) «/home/jcm/testdebug.php»
[«line»]=>
int(18)
[«function»]=>
string(11) «__construct»
[«class»]=>
string(11) «ParentClass»
[«object»]=>
object(ParentClass)#1 (1) <
[«_child»]=>
object(ChildClass)#2 (1) <
[«_parent»]=>
*RECURSION*
>
>
[«type»]=>
string(2) «->»
[«args»]=>
array(0) <
>
>
>

Attention in the *RECURSION* hint provided

Just a short note on debug_backtrace options for PHP 5.3.6 or newer:

use this example and try calling debug_backtrace with different options

function F1 ()
<
echo «
» ;
echo «in F1 now» ;
echo «» ;
>

class DebugOptionsTest
<
function F2 ()
<
echo «
» ;
echo «in F2 now» ;
F1 ();
>

echo » calling F1″ ;
F1 ();

Simple function to get a string in form «filename: [class->][function(): ]»

Quick and dirty formatted output from debug_backtrace.

When using debug_backtrace() to check if you’re being accessed from another caller, please remember to ask debug_backtrace to only go as far as needed in depth and skip taking the entire debug object as return parameter:

I use this simple but effective function so i can see which method in the child class called the current method (in the parent class).

function get_caller_method ()
<
$traces = debug_backtrace ();

initialize
debug example.php> code-lines: 39-41 time: 2.0002 mem: 19 KB
debug example.php> code-lines: 41-44 time: 0.0000 mem: 19 KB
debug example.php> code-lines: 44-51 time: 0.6343 mem: 9117 KB
debug example.php> code-lines: 51-53 time: 0.1003 mem: 9117 KB
debug example.php> code-lines: 53-55 time: 0.0595 mem: 49 KB
*/

A usual entry looks like this:
array( 6 ) <
‘file’ =>
string ( 87 ) «DbSelector.php»
‘line’ =>
int ( 171 )
‘function’ =>
string ( 5 ) «error»
‘class’ =>
string ( 42 ) «LoggingService»
‘type’ =>
string ( 2 ) «::»
‘args’ =>
array( 1 ) <
[ 0 ] =>
string ( 27 ) «Connecting to DB: unittests»
>
>
?>

Be warned though that ‘file’ and ‘class’ do not reference the same thing!
‘file’ means which file calls the next step.
‘class’ is the next step being called.

So ‘file’ is the caller, ‘class’ is the callee.

It works a little bit different with resources in different PHP versions.

For example:
function foo($bar)
<
return debug_backtrace();
>

With 5.3.10 I got:
when resource is opened: resource
when resource is closed: resource

With 5.5.9:
when resource is opened: resource
when resource is closed: unknown type

Here is a function to cleanly output the debug_backtrace to the error_log

Источник

debug_backtrace

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

debug_backtrace — Выводит стек вызовов функций в массив

Описание

debug_backtrace() выводит стек вызовов функций PHP в массив.

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

Начиная с PHP 5.4.0, этот аргумент используется для ограничения количества вызовов функций, которые будут выведены. По умолчанию ( limit = 0 ) будет выведен весь стек вызовов.

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

Возвращает массив вложенных ассоциативных массивов ( array ). Описание элементов массива приведено ниже:

Список возможных элементов массивов, возвращаемых функцией debug_backtrace()

Имя Тип Описание
function string Имя текущей функции. Смотрите также __FUNCTION__.
line int Текущий номер строки. Смотрите также __LINE__.
file string Имя текущего файла. Смотрите также __FILE__.
class string Имя текущего класса. Смотрите также __CLASS__
object object Текущий объект.
type string Текущий тип вызова функции. Если это вызов метода объекта, будет выведено «->». Если это вызов статического метода класса, то «::». Если это простой вызов функции, не выводится ничего.
args array При нахождении внутри функции, будет выведен список аргументов этой функции. Если внутри включаемого файла, будет выведен список включаемых файлов.

Примеры

Пример #1 Пример использования debug_backtrace()

a_test ( ‘друг’ );
?>

// файл /tmp/b.php
include_once ‘/tmp/a.php’ ;
?>

Результат аналогичен приведенному ниже, если запустить /tmp/b.php :

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

Источник

debug_print_backtrace() to String for log-file

I have a problem. I would like to log the backtrace in a specific case in a log-file. debug_print_backtrace() builds a correct string for my purposes but debug_print_backtrace() prints the trace on the screen instead of returning it.

3 Answers 3

Use another function. debug_backtrace() returns an array that you can loop through, format and save:

Or use output buffering for the formatted output string:

It’s possible to do it with even less code, actually. Avoid the overhead of buffering with.

And if you want to get more information for a more valuable stacktrace (line numbers, local object vars, etc.), try.

To add on to the answer given by @HoldOffHunger, the following would have been sufficient for logging purpose:

Not the answer you’re looking for? Browse other questions tagged php debugging logging or ask your own question.

Linked

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40224

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Читайте также:  Что такое эдиты в видео
Образовательный портал