ホームページ  >  記事  >  バックエンド開発  >  PHPを介してコード呼び出しを追跡するdebug_backtraceメソッドを実装する方法

PHPを介してコード呼び出しを追跡するdebug_backtraceメソッドを実装する方法

jacklove
jackloveオリジナル
2018-06-08 15:54:171422ブラウズ

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

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

debug_backtrace メソッドの説明

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

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )

パラメータ

##オプション##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   如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。

Instance

ユーザー情報と注文のユーザー情報を取得するには、呼び出しプロセスは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 であることがわかります。 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

この記事では、実装について説明します。 php debug_backtrace メソッドはコード呼び出しを追跡します。詳細については、PHP の中国語 Web サイトを参照してください。

関連する推奨事項:

警告: php で非数値値に問題が発生しました。


の原因と解決策を説明します。 # mysql を使用してターミナルで SQL を実行し、結果をファイルに書き込む方法

mysql を使用して 2 つのデータベースのテーブル構造を比較する方法


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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。