PHP를 통해 debug_backtrace 메소드 추적 코드 호출을 구현하는 방법

jacklove
풀어 주다: 2023-03-30 20:28:02
원래의
1475명이 탐색했습니다.

예를 들어 개발 과정에서 다른 사람이 개발한 코드를 수정하거나 문제가 있는 코드를 디버깅하려면 코드 프로세스를 단계별로 추적하여 문제가 있는 부분을 찾아 수정해야 합니다. 특정 코드가 어떤 메소드를 호출했는지 알아내고, 처음 호출된 위치(호출된 파일, 행 수, 매개변수 등 포함)로 돌아갈 수 있는 메소드가 있는 경우 문제 위치를 쉽게 찾을 수 있습니다.

php의 debug_backtrace 메소드는 코드 호출을 추적하고 코드 디버깅을 용이하게 할 수 있습니다.

debug_backtrace 메소드 설명

역추적 생성(backtrace)

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
로그인 후 복사

Parameters

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   如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。
로그인 후 복사

Instance

주문의 사용자 정보 및 사용자 정보를 가져옵니다. ; user->message, 최종적으로 정렬된 정보를 반환합니다.

디버깅 중에 메시지의 데이터가 올바르지 않다는 것을 발견했다고 가정하면 메시지의 debug_backtrace 메서드를 사용하여 호출 프로세스와 매개 변수를 보고 문제를 일으키는 단계를 확인할 수 있습니다.

DEBUG_BACKTRACE_IGNORE_ARGS를 사용하면 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
line 8
class Order
function get_order
args int 1000000

2.order임을 알 수 있습니다. . PHP
line 14
클래스 사용자
율 get_user get_user
Args int 1001

3.user.php
line 12
class 메시지
Function get_message
ARGS int 1001

이 기사는 phpback 호출을 통해 debug_trace 메소드 추적 코드를 구현하는 방법을 설명합니다. , 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 주목하세요.

관련 권장 사항:

경고: php

mysql을 사용하여 터미널에서 sql을 실행하고 결과를 파일에 쓰는 방법

에 대한 원인과 해결 방법을 설명하세요.

mysql을 통해 두 데이터베이스의 테이블 구조를 비교하는 방법


위 내용은 PHP를 통해 debug_backtrace 메소드 추적 코드 호출을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿