php debug_backtrace方法跟踪代码调用
php debug_backtrace方法跟踪代码调用
<pre>
function string 当前的函数名,参见: __FUNCTION__。
line integer 当前的行号。参见: __LINE__。
file string 当前的文件名。参见: __FILE__。
class string 当前 class 的名称。参见 __CLASS__
object object 当前的 object。
type string 当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。 如果是一个函数调用,则返回空。
args array 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。
</pre>
index.php
<pre>
<?php
require 'order.php';
// 获取用户订单资料
$order_id = 1000000;
$oOrder = new Order;
$order_info = $oOrder->get_order($order_id);
?>
</pre>
order.php
<pre>
<?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;
}
}
?>
</pre>
user.php
<pre>
<?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;
}
}
?>
</pre>
message.php
<pre>
<?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;
}
}
?>
</pre>
<pre>
/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
</pre>
可以看到调用过程是
<pre>
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
</pre>
这个方法主要看 某个函数是调用方式是怎么样的 来解决问题的
php debug_backtrace方法跟踪代码调用的更多相关文章
- PHP使用debug_backtrace方法跟踪代码调用
在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改.如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调 ...
- php 利用debug_backtrace方法跟踪代码调用
在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改.如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调 ...
- php的内置函数debug_backtrace()与get_included_files()跟踪代码调用(Thinkphp框架举例)
debug_backtrace() 在我们开发一个项目中,或者二开研究某个开源程序,需要对代码流程一步步去跟踪,来研究它的逻辑,才可以进行修改,达到我们的开发目的.php的内置函数debug_back ...
- Android调用JNI本地方法跟踪目标代码
正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 ...
- eclipse查看方法被那些代码调用open call hierarchy
当我们编写的代码量十分巨大,项目十分复杂的时候,想要查找某一个方法都被其他那些代码调用了是一件十分困难的事,然后Eclipse提供了十分方便的方法用于查看方法都被那些代码调用了. 方法一: 选中要查看 ...
- c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询
天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. 不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...
- jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?
jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JA ...
- ReactNative-JS 调用原生方法实例代码(转载)
第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule package com.mixture; import android.content.Con ...
- Dottrace跟踪代码执行时间
当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决 ...
随机推荐
- Python3_基础
目录 数据类型 变量 数据类型的转换 算术操作符 输入 字符串常用方法 数据类型 我们先来看看三种常见的数据类型 字符串 str 在Python中,字符串一般都用引号引起来,不管是用单引号还是双引号都 ...
- ThinkPhp3.1.3执行存储过程返回false
1.Tp在调用存储过程的时候,每次都显示false 返回一大片,下面是我自己的代码.
- selenium-模块概述(1)
Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 1.目录结构如下: D:\soft\python36\Lib\site-pa ...
- textView 实现完成收键盘操作
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSStr ...
- 使用 git bisect 定位你的 BUG
Git 是开发者的好帮手,今天跟大家分享的是用 git bisect 来找到你代码中的 bad commit . 背景 你可能遇到过这种情况, 昨天下班前把模块开发完了, 单元测试验证通过, git ...
- Mybatis和Mysql的Datetime的一些问题
Mysql的时间类型 时间类型有time, date, datetime, timestamp 如Mysql官方文档所述: time 没有date,date没有time,datetime是date和t ...
- NetworkManager网络通讯_NetworkLobbyManager(三)
此部分可以先建立游戏大厅,然后进入游戏,此处坑甚多耗费大量时间.国内百度出来的基本没靠谱的,一些专栏作家大V也不过是基本翻译了一下用户手册(坑啊),只能通过看youtube视频以及不停的翻阅用户手册解 ...
- js重点
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...
- vue项目如何在node启动
首先将vue项目通过命令npm run build 打包,然后创建start.js,代码如下: // const userApi = require('./api'); const fs = requ ...