예를 들어 개발 과정에서 다른 사람이 개발한 코드를 수정하거나 문제가 있는 코드를 디버깅하려면 코드 프로세스를 단계별로 추적하여 문제가 있는 부분을 찾아 수정해야 합니다. 특정 코드가 어떤 메소드를 호출했는지 알아내고, 처음 호출된 위치(호출된 파일, 행 수, 매개변수 등 포함)로 돌아갈 수 있는 메소드가 있는 경우 문제 위치를 쉽게 찾을 수 있습니다.
php의 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 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。
주문의 사용자 정보 및 사용자 정보를 가져옵니다. ; user->message, 최종적으로 정렬된 정보를 반환합니다.
디버깅 중에 메시지의 데이터가 올바르지 않다는 것을 발견했다고 가정하면 메시지의 debug_backtrace 메서드를 사용하여 호출 프로세스와 매개 변수를 보고 문제를 일으키는 단계를 확인할 수 있습니다.
DEBUG_BACKTRACE_IGNORE_ARGS를 사용하면 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
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 중국어 웹사이트를 주목하세요.
관련 권장 사항:
mysql을 사용하여 터미널에서 sql을 실행하고 결과를 파일에 쓰는 방법
에 대한 원인과 해결 방법을 설명하세요.mysql을 통해 두 데이터베이스의 테이블 구조를 비교하는 방법
위 내용은 PHP를 통해 debug_backtrace 메소드 추적 코드 호출을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!