PHP使用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

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

order.php

<?php
require '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

<?php
require '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
class User
function get_user
args int 1001

3.user.php
line 12
class Message
function get_message
args int 1001

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP错误与异常处理方法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP运算与运算符用法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • Windows和Linux中php代码调试工具Xdebug的安装与配置详解

    一.为什么需要Debugger? 很多PHP程序员调试使用echo.print_r().var_dump().printf()等,其实对 于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以 看出来(当然可能还需要使用一些时间函数).那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓. 二.什么是Xdebug? Xdebug是一个开放源代码的PHP程序调试器(

  • 最常用的8款PHP调试工具

    Web 开发并不是一项轻松的任务,有超级多服务端脚本语言提供给开发者,但是当前 PHP 因为具有额外的一些强大的功能而越来越流行.PHP 是最强大的服务端脚本语言之一,同时也是 Web 开发者和设计者用的最多,最经常使用的语言. PHP 有非常多的工具,其中包括测试和优化工具,文档工具,代码编辑器,安全工具,同时也支持框架和在线工具.这就是为什么在那么短的时间内吸引了那么的开发者使用它.工具总是能帮助简化和加速开发的过程. 1)  Pinba Pinba 是个开源的 MySQL 存储引擎,主要任

  • FirePHP 推荐一款PHP调试工具

    PHP调试有很多中方法.今天给大家推荐的是 FirePHP(http://www.firephp.org/). 这个工具,是基于firefox的一个组件.Firephp组件安装地址.使用之前需要先安装下这个组件.完了还需要down一个FirePHP的包.下载地址. 下载完成后可以看到包里的文件如下: 我们现在来写个例子测试下.(需要include 进来fb.php文件哦)代码如下: 我们在firefox下运行.结果如下: 在这里就可以看到$str的值了. 接下来来介绍下FirePHP的几个常用方

  • php代码调试利器firephp安装与使用方法分析

    本文实例分析了php代码调试利器firephp安装与使用方法.分享给大家供大家参考,具体如下: firephp简述 如果你曾经写过js代码的话,那么你对如下的代码肯定不会陌生: console.log('something'); 通过这行代码,就可以在chome和firefox的开发工具(F12)的console栏中看到你想要的调试信息. 那么,php能不能也通过这种形式进行代码调试呢? 答案是肯定的,可以通过firephp工具来实现在浏览器的console栏中进行调试. firephp的安装

  • 使用GDB调试PHP代码,解决PHP代码死循环问题

    最近在帮同事解决Swoole Server问题时,发现有1个worker进程一直处于R的状态,而且CPU耗时非常高.初步断定是PHP代码中发生死循环. 下面通过一段代码展示如何解决PHP死循环问题. 复制代码 代码如下: #dead_loop.php $array = array(); for($i = 0; $i < 10000; $i++) {     $array[] = $i; } include __DIR__."/include.php"; #include.php

  • PHP中调试函数debug_backtrace的使用示例代码

    前言 如果我们想知道某个方法被谁调用了? debug_backtrace可以解决.debug_backtrace() 可以打印出一个页面的调用过程 , 从哪儿来到哪儿去一目了然. 有时候我们想知道这个函数或方法的调用堆栈,也就是它是如何一级一级是被调用到的,可以用 PHP 的 debug_backtrace 函数打印,就像这样: 示例代码 public function update(Request $request, $id) { dd(debug_backtrace()); $getGame

  • phpstorm配置Xdebug进行调试PHP教程

    运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相对应 1. PHP安装xdebug扩展 php.ini的配置,下面的配置仅供参考,路径要换成自己的! [xdebug] zend_extension="D:\wamp\php-5.6.2-x64\ext\php_xdebug-2.2.5-5.6-vc11-x86_64.dll&quo

  • 如何使用FireFox插件FirePHP调试PHP

    如果你和我一样,你会在开发网页项目时候完全无法离开FireBug.这个小巧的"臭虫"是一个神奇而有用的HTML/CSS/JavaScript/Ajax调试器.但是你也许不知道这个还可以用来调试PHP,没错,它可以,感谢一款名为FirePHP的FireFox插件. 通过一个小小的服务端库,和这款在Firebug上的插件,你的PHP脚本能够发送调试信息到浏览器,轻易的通过HTTP相应头编码.一旦你设置,你可以在Fiirebug的控制台获得PHP脚本警告和错误,就感觉像直接调试JavaScr

  • PHP学习笔记 (1) 环境配置与代码调试

    一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

  • PHP 调试工具Debug Tools

    发现了个调试PHP源码的好同志: PHP DEBUG TOOLS 其项目地址: http://freshmeat.net/projects/php-debug-tools/ 文件下载地址: http://freshmeat.net/urls/7c58ae3fecce5763e7546b958d36e082 目前是1.03版本 这里偶的环境是WINDOW XP , APACHE2.2, PHP5.2+ Zend Optimizer, 这里结合PHP DEBUG TOOLS的帮助文档来讲解,图有些是

随机推荐