当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用debug_backtrace方法跟踪调试代码调用详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-10 13:38:00 浏览: 评论:0 

这篇文章主要介绍了PHP使用debug_backtrace方法跟踪调试代码调用,结合实例形式详细分析了debug_backtrace函数的功能、参数、使用方法及相关操作注意事项,需要的朋友可以参考下。

本文实例讲述了PHP使用debug_backtrace方法跟踪调试代码调用,分享给大家供大家参考,具体如下:

在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改。如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调用的文件,行数,参数等),这样就能很方便的定位到出问题的地方。

使用php的debug_backtrace方法可以对代码调用进行跟踪,方便调试代码。它可以生成一个关联数组,数组中会收集当前应用程序的状态信息,此外还提供当前应用程序的堆栈信息,以及堆栈中存储应用程序的方法。

debug_backtrace 方法说明

产生一条回溯跟踪(backtrace)

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

参数

options

DEBUG_BACKTRACE_PROVIDE_OBJECT

是否填充 “object” 的索引。

DEBUG_BACKTRACE_IGNORE_ARGS

是否忽略 “args” 的索引,包括所有的 function/method 的参数,能够节省内存开销。

limit

这个参数能够用于限制返回堆栈帧的数量,默认为(limit=0),返回所有堆栈帧。

返回值

返回一个包含众多关联数组的array,可能返回的元素:

名字 类型 说明

function string 当前的函数名,参见: __FUNCTION__。

line integer 当前的行号。参见: __LINE__。

file string 当前的文件名。参见: __FILE__。

class string 当前 class 的名称。参见 __CLASS__

object object 当前的 object。

type string 当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。 如果是一个函数调用,则返回空。

args array 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。

实例

获取订单的用户资料及用户讯息,调用流程是index->order->user->message,最后返回整理后的信息。

假设我们调试时发现message的数据有误,则可以在message使用debug_backtrace方法,查看调用的流程及调用的参数,检查哪一步出现问题。

使用DEBUG_BACKTRACE_IGNORE_ARGS则会忽略args(方法调用的参数)

index.php

  1. <?php 
  2. require 'order.php'
  3. // 获取用户订单资料 
  4. $order_id = 1000000; 
  5. $oOrder = new Order; 
  6. $order_info = $oOrder->get_order($order_id); 
  7. ?> 

order.php

  1. <?php 
  2. require 'user.php'
  3. // 订单资料 
  4. class Order{ 
  5.  // 获取订单资料 
  6.  function get_order($order_id){ 
  7.   $user_id = 1001; 
  8.   // 获取用户资料 
  9.   $oUser = new User; 
  10.   $user_info = $oUser->get_user($user_id); 
  11.   // 订单资料 
  12.   $order_info = array
  13.    'order_id' => $order_id
  14.    'order_name' => 'my order'
  15.    'user_info' => $user_info
  16.   ); 
  17.   return $order_info
  18.  } 
  19. ?> 

user.php

  1. <?php 
  2. require 'message.php'
  3. // 用户资料 
  4. class User{ 
  5.  // 获取用户资料 
  6.  function get_user($user_id){ 
  7.   // 获取用户讯息 
  8.   $oMessage = new Message; 
  9.   $user_message = $oMessage->get_message($user_id); 
  10.   $user_info = array
  11.     'user_id' => $user_id
  12.     'name' => 'fdipzone'
  13.     'message' => $user_message 
  14.   ); 
  15.   return $user_info
  16.  } 
  17. ?> 

message.php

  1. <?php 
  2. // 用户讯息 
  3. class Message{ 
  4.  // 获取用户讯息 
  5.  function get_message($user_id){ 
  6.   $message = array
  7.    array('id'=>1, 'title'=>'message1'), 
  8.    array('id'=>2, 'title'=>'message2'), 
  9.   ); 
  10.   // 加入跟踪调试 
  11.   $backtrace = debug_backtrace(); 
  12.   var_dump($backtrace); 
  13.   return $message
  14.  } 
  15. ?> 

运行index.php, 输出

  1. /message.php:15: 
  2.  
  3. array (size=3) 
  4.   0 => 
  5.     array (size=7) 
  6.       'file' => string '/user.php' (length=9) 
  7.       'line' => int 12 
  8.       'function' => string 'get_message' (length=11) 
  9.       'class' => string 'Message' (length=7) 
  10.       'object' => 
  11.         object(Message)[3] 
  12.       'type' => string '->' (length=2) 
  13.       'args' => 
  14.         array (size=1) 
  15.           0 => int 1001 
  16.   1 => 
  17.     array (size=7) 
  18.       'file' => string '/order.php' (length=10) 
  19.       'line' => int 14 
  20.       'function' => string 'get_user' (length=8) 
  21.       'class' => string 'User' (length=4) 
  22.       'object' => 
  23.         object(User)[2] 
  24.       'type' => string '->' (length=2) 
  25.       'args' => 
  26.         array (size=1) 
  27.           0 => int 1001 
  28.   2 => 
  29.     array (size=7) 
  30.       'file' => string '/index.php' (length=9) 
  31.       'line' => int 8 
  32.       'function' => string 'get_order' (length=9) 
  33.       'class' => string 'Order' (length=5) 
  34.       'object' => 
  35.         object(Order)[1] 
  36.       'type' => string '->' (length=2) 
  37.       'args' => 
  38.         array (size=1) 
  39.           0 => int 1000000 

可以看到调用过程是

  1. 1.index.php 
  2. line 8 
  3. class Order 
  4. function get_order 
  5. args int 1000000 
  6.  
  7. 2.order.php 
  8. line 14 
  9. class User 
  10. function get_user 
  11. args int 1001 
  12.  
  13. 3.user.php 
  14. line 12 
  15. class Message 
  16. function get_message 
  17. args int 1001

Tags: debug_backtrace PHP调试代码

分享到: