PHP は debug_backtrace メソッドを使用してコード呼び出しを追跡します

jacklove
リリース: 2023-04-01 12:14:01
オリジナル
1485 人が閲覧しました

開発プロセス中、たとえば、他の人が開発したコードを変更したり、問題のあるコードをデバッグしたりする場合、コードのプロセスを段階的に追跡し、問題のある領域を見つけて変更を加える必要があります。特定のコードがどのメソッドで呼び出されたのかを取得でき、最初に呼び出された場所(呼び出されたファイル、行数、パラメータなどを含む)に戻ることができるメソッドがある場合、それは次のようになります。問題の場所を特定しやすい。

php の debug_backtrace メソッドは、コードのデバッグを容易にするためにコード呼び出しをトレースできます。

debug_backtrace メソッドの説明

バックトレースの生成 (バックトレース)

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
ログイン後にコピー

パラメータ

##options

DEBUG_BACKTRACE_PROVIDE_OBJECT

「オブジェクト」のインデックスを埋めるかどうか。

DEBUG_BACKTRACE_IGNORE_ARGS

すべての関数/メソッド パラメーターを含む「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 &#39;order.php&#39;;// 获取用户订单资料$order_id = 1000000;$oOrder = new Order;$order_info = $oOrder->get_order($order_id);?>
ログイン後にコピー


order.php

<?phprequire &#39;user.php&#39;;// 订单资料class Order{
    // 获取订单资料
    function get_order($order_id){
        $user_id = 1001;        // 获取用户资料
        $oUser = new User;        $user_info = $oUser->get_user($user_id);        // 订单资料
        $order_info = array(            &#39;order_id&#39; => $order_id,            &#39;order_name&#39; => &#39;my order&#39;,            &#39;user_info&#39; => $user_info,
        );        return $order_info;
    }
}?>
ログイン後にコピー


user.php

<?phprequire &#39;message.php&#39;;// 用户资料class User{
    // 获取用户资料
    function get_user($user_id){
        // 获取用户讯息
        $oMessage = new Message;        $user_message = $oMessage->get_message($user_id);        $user_info = array(                &#39;user_id&#39; => $user_id,                &#39;name&#39; => &#39;fdipzone&#39;,                &#39;message&#39; => $user_message
        );        return $user_info;
    }
}?>
ログイン後にコピー


message.php

<?php// 用户讯息class Message{
    // 获取用户讯息
    function get_message($user_id){
        $message = array(            array(&#39;id&#39;=>1, &#39;title&#39;=>&#39;message1&#39;),            array(&#39;id&#39;=>2, &#39;title&#39;=>&#39;message2&#39;),
        );        // 加入跟踪调试
        $backtrace = debug_backtrace();
        var_dump($backtrace);        return $message;
    }
}?>
ログイン後にコピー
index.php を実行し、出力

/message.php:15:array (size=3)  0 => 
    array (size=7)      &#39;file&#39; => string &#39;/user.php&#39; (length=9)      &#39;line&#39; => int 12
      &#39;function&#39; => string &#39;get_message&#39; (length=11)      &#39;class&#39; => string &#39;Message&#39; (length=7)      &#39;object&#39; => 
        object(Message)[3]      &#39;type&#39; => string &#39;->&#39; (length=2)      &#39;args&#39; => 
        array (size=1)          0 => int 1001
  1 => 
    array (size=7)      &#39;file&#39; => string &#39;/order.php&#39; (length=10)      &#39;line&#39; => int 14
      &#39;function&#39; => string &#39;get_user&#39; (length=8)      &#39;class&#39; => string &#39;User&#39; (length=4)      &#39;object&#39; => 
        object(User)[2]      &#39;type&#39; => string &#39;->&#39; (length=2)      &#39;args&#39; => 
        array (size=1)          0 => int 1001
  2 => 
    array (size=7)      &#39;file&#39; => string &#39;/index.php&#39; (length=9)      &#39;line&#39; => int 8
      &#39;function&#39; => string &#39;get_order&#39; (length=9)      &#39;class&#39; => string &#39;Order&#39; (length=5)      &#39;object&#39; => 
        object(Order)[1]      &#39;type&#39; => string &#39;->&#39; (length=2)      &#39;args&#39; => 
        array (size=1)          0 => int 1000000
ログイン後にコピー

呼び出しプロセスが

であることがわかります。

1.index.php

8行目

class Order
function get_order
args int 1000000

2.order.php

14行目

class User
function get_user
args int 1001

3.user.php

line 12

class Message
function get_message
args int 1001

This関連するコンテンツについては、PHP の中国語 Web サイトに注目してください。

関連する推奨事項:

ターミナルで SQL を実行し、結果をファイルに書き込む Mysql の方法


php はRedis トークンバケットアルゴリズムに基づいてフロー制御を実装


Redis のマスターとスレーブの同期、読み書き分離設定関連の操作

以上がPHP は debug_backtrace メソッドを使用してコード呼び出しを追跡しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート