ホームページ >バックエンド開発 >PHPチュートリアル >PHPを介してコード呼び出しを追跡するdebug_backtraceメソッドを実装する方法
開発プロセス中、たとえば、他の人が開発したコードを変更したり、問題のあるコードをデバッグしたりする場合、コードのプロセスを段階的に追跡し、問題のある領域を見つけて変更を加える必要があります。特定のコードがどのメソッドで呼び出されたのかを取得でき、最初に呼び出された場所(呼び出されたファイル、行数、パラメータなどを含む)に戻ることができるメソッドがある場合、それは次のようになります。問題の場所を特定しやすい。
php の debug_backtrace メソッドは、コードのデバッグを容易にするためにコード呼び出しをトレースできます。
バックトレースの生成 (バックトレース)
array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
パラメータ
##オプション##DEBUG_BACKTRACE_PROVIDE_OBJECT
「オブジェクト」のインデックスを埋めるかどうか。
DEBUG_BACKTRACE_IGNORE_ARGS
limit このパラメータは、返されるスタック フレームの数を制限するために使用できます。デフォルトは (limit=0) で、すべてのスタック フレームが制限されます。戻ってきた。
戻り値多くの連想配列を含む配列を返します。返される可能性のある要素:
名字 类型 说明function string 当前的函数名,参见: __FUNCTION__。 line integer 当前的行号。参见: __LINE__。 file string 当前的文件名。参见: __FILE__。class string 当前 class 的名称。参见 __CLASS__object object 当前的 object。 type string 当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。 如果是一个函数调用,则返回空。 args array 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。
Instance
デバッグ中にメッセージのデータが正しくないことが判明したとします。メッセージに対して debug_backtrace メソッドを使用して、呼び出しプロセスと呼び出しのパラメーターを表示し、どのステップに問題があるかを確認できます。
#DEBUG_BACKTRACE_IGNORE_ARGS
を使用すると、引数 (メソッド呼び出しのパラメーター) が無視されます。index.php
<?phprequire 'order.php';// 获取用户订单资料$order_id = 1000000;$oOrder = new Order;$order_info = $oOrder->get_order($order_id);?>
<?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;
}
}?>
<?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 であることがわかります。 php
8 行目
class Orderfunction get_order
args int 1000000
2.order.php
14 行目
function get_user
args int 1001
3.user.php
line 12
function get_message
args int 1001
この記事では、実装について説明します。 php debug_backtrace メソッドはコード呼び出しを追跡します。詳細については、PHP の中国語 Web サイトを参照してください。
警告: php で非数値値に問題が発生しました。
の原因と解決策を説明します。 # mysql を使用してターミナルで SQL を実行し、結果をファイルに書き込む方法
mysql を使用して 2 つのデータベースのテーブル構造を比較する方法
以上がPHPを介してコード呼び出しを追跡するdebug_backtraceメソッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。