開発プロセス中、たとえば、他の人が開発したコードを変更したり、問題のあるコードをデバッグしたりする場合、コードのプロセスを段階的に追跡し、問題のある領域を見つけて変更を加える必要があります。特定のコードがどのメソッドで呼び出されたのかを取得でき、最初に呼び出された場所(呼び出されたファイル、行数、パラメータなどを含む)に戻ることができるメソッドがある場合、それは次のようになります。問題の場所を特定しやすい。
php の debug_backtrace メソッドは、コードのデバッグを容易にするためにコード呼び出しをトレースできます。
バックトレースの生成 (バックトレース)
array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
パラメータ
##options
DEBUG_BACKTRACE_PROVIDE_OBJECT「オブジェクト」のインデックスを埋めるかどうか。
すべての関数/メソッド パラメーターを含む「args」のインデックスを無視するかどうかにより、メモリのオーバーヘッドを節約できます。
limit このパラメータは、返されるスタック フレームの数を制限するために使用できます。デフォルトは (limit=0) で、すべてのスタック フレームが制限されます。戻ってきた。
戻り値
名字 类型 说明function string 当前的函数名,参见: __FUNCTION__。 line integer 当前的行号。参见: __LINE__。 file string 当前的文件名。参见: __FILE__。class string 当前 class 的名称。参见 __CLASS__object object 当前的 object。 type string 当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。 如果是一个函数调用,则返回空。 args array 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。例ユーザー情報と注文のユーザー情報を取得します。呼び出しプロセスは、index->order->user->message で、最後にソートされた情報を返します。 デバッグ中にメッセージのデータが正しくないことが判明したとします。メッセージに対して debug_backtrace メソッドを使用して、呼び出しプロセスと呼び出しのパラメーターを表示し、どのステップに問題があるかを確認できます。 #DEBUG_BACKTRACE_IGNORE_ARGS
を使用すると、引数 (メソッド呼び出しのパラメーター) が無視されます。
index.php<?phprequire 'order.php';// 获取用户订单资料$order_id = 1000000;$oOrder = new Order;$order_info = $oOrder->get_order($order_id);?>
order.php<?phprequire 'user.php';// 订单资料class Order{
// 获取订单资料
function get_order($order_id){
$user_id = 1001; // 获取用户资料
$oUser = new User; $user_info = $oUser->get_user($user_id); // 订单资料
$order_info = array( 'order_id' => $order_id, 'order_name' => 'my order', 'user_info' => $user_info,
); return $order_info;
}
}?>
user.php<?phprequire 'message.php';// 用户资料class User{
// 获取用户资料
function get_user($user_id){
// 获取用户讯息
$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// 用户讯息class Message{
// 获取用户讯息
function get_message($user_id){
$message = array( array('id'=>1, 'title'=>'message1'), array('id'=>2, 'title'=>'message2'),
); // 加入跟踪调试
$backtrace = debug_backtrace();
var_dump($backtrace); return $message;
}
}?>
index.php を実行し、出力
/message.php:15:array (size=3) 0 => array (size=7) 'file' => string '/user.php' (length=9) 'line' => int 12 'function' => string 'get_message' (length=11) 'class' => string 'Message' (length=7) 'object' => object(Message)[3] 'type' => string '->' (length=2) 'args' => array (size=1) 0 => int 1001 1 => array (size=7) 'file' => string '/order.php' (length=10) 'line' => int 14 '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 'function' => string 'get_order' (length=9) 'class' => string 'Order' (length=5) 'object' => object(Order)[1] 'type' => string '->' (length=2) 'args' => array (size=1) 0 => int 1000000
呼び出しプロセスが
であることがわかります。1.index.php
8行目class Order
function get_order
args int 1000000
2.order.php
class User
function get_user
args int 1001
3.user.php
class Message
function get_message
args int 1001
This関連するコンテンツについては、PHP の中国語 Web サイトに注目してください。
関連する推奨事項:
ターミナルで SQL を実行し、結果をファイルに書き込む Mysql の方法php はRedis トークンバケットアルゴリズムに基づいてフロー制御を実装Redis のマスターとスレーブの同期、読み書き分離設定関連の操作以上がPHP は debug_backtrace メソッドを使用してコード呼び出しを追跡しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。