During the development process, such as modifying code developed by someone else or debugging a problem, you need to track the code process step-by-step and find the place where the problem is to be modified. If there is a way to get to a piece of code is called by which method, and can always go back to the beginning of the call (including the number of files, rows, parameters, etc.), so that it can be easily located to the problem place.
The PHP debug_backtrace method can be used to track code calls and to facilitate debugging of code.
Debug_backtrace Method Description
Generate a backtracking trace (backtrace)
Array debug_backtrace ([int $options = debug_backtrace_provide_object [, int $limit = 0]])
Parameters
Options
Debug_backtrace_provide_object
Whether to populate the index of "object".
Debug_backtrace_ignore_args
Whether to ignore the "args" index, including all Function/method parameters, can save memory overhead.
Limit
This parameter can be used to limit the number of return stack frames, which defaults to (limit=0), returning all stack frames.
return value
Returns an array containing a number of associative arrays, possibly returning elements:
The name Type describes the function string's current name, see: __function__. Line integer The current row number. See also: __line__. file string the current filename. See also: __file__. The name of the current class of class string. See __class__object Object , the current object. type string that is currently called. If it is a method, it returns "--". If it is a static method, it returns "::". If it is a function call, it returns NULL. Args array If in a function, this lists the parameters of the function. If it is in a contained file, the included file name is listed.
Instance
Obtain the user information of the order and the user message, the calling process is Index->order->user->message, and finally returns the collated information.
Suppose we debug when we find that the data of the message is wrong, you can use the Debug_backtrace method in message to see the process of the call and the parameters of the call, and check which step has the problem.
Using Debug_backtrace_ignore_args ignores ARGS (parameters of the method call)
index.php
<?phprequire ' order.php ';//get user order data $order_id = 1000000; $oOrder = new Order; $order _info = $oOrder->get_order ($ ORDER_ID);? >
order.php
<?phprequire ' user.php ';//Order Data Class order{ //Get Order data function Get_order ($order _id) { $user _id = 1001; Get user profile $oUser = new user; $user _info = $oUser->get_user ($user _id); Order data $order _info = Array ( ' order_id ' = + $order _id, ' order_name ' = ' my order ', ' User_info ' =& Gt $user _info, ); return $order _info; }}? >
user.php
<?phprequire ' message.php ';//user profile class user{ //Get User data function get_user ($user _id) { //Get user info $ Omessage = new Message; $user _message = $oMessage->get_message ($user _id); $user _info = Array ( ' user_id ' = + $user _id, ' name ' = ' fdipzone ', ' message ' = = $user _message ) ; return $user _info; }}? >
message.php
<?php//user Message Class message{ //Get user message function get_message ($user _id) { $message = array ( array ( ' id ' =>1, ' title ' = ' Message1 '), array (' ID ' =>2, ' title ' = ' Message2 '), ); Add Trace debug $backtrace = Debug_backtrace (); Var_dump ($backtrace); return $message; }}? >
run index.php, output
/message.php:15:array (size=3) 0 = = Array (size=7) ' file ' = = String '/user.php ' (length=9) ' line ' =&G T int ' function ' = = String ' Get_message ' (length=11) ' class ' = = String ' message ' (length=7) ' object ' = = Object (Message) [3] ' type ' = ' + ' (length=2) ' args ' = Array (size=1) 0 = int 1001 1 = array (size=7) ' file ' = = String '/order.php ' (length=10) ' line ' = = int + ' function ' = String ' Get_user ' (length=8) ' class ' = = String ' user ' (length=4) ' object ' = = Object (User) [2] ' type ' = + string ' (length=2) ' args ' = Array (size=1) 0 = int 1001 2 = = Array (size=7) ' file ' = = String '/index.php ' (length=9) ' line ' = = int 8 ' funct Ion ' = = String ' Get_order ' (length=9) ' class ' = = String ' order ' (length=5) ' object ' = = Object (O Rder) [1] ' type '= = String ' (length=2) ' args ' = = Array (size=1) 0 = int 1000000
You can see that the calling procedure is
1.index.php
Line 8
Class Order
function Get_order
args int 1000000
2.order.php
Line 14
Class User
function Get_user
args int 1001
3.user.php
Line 12
Class Message
function Get_message
args int 1001
This article explains how PHP uses the Debug_backtrace method to track code calls, and more about the PHP Chinese web.
Related recommendations:
How MySQL executes SQL at the terminal and writes the results to a file
PHP uses a token bucket algorithm based on Redis for traffic control
Redis master-Slave synchronization, read and write separation settings related operations