日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 利用debug_backtrace方法跟踪代码调用

發布時間:2024/9/20 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 利用debug_backtrace方法跟踪代码调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發過程中,例如要修改別人開發的代碼或調試出問題的代碼,需要對代碼流程一步步去跟蹤,找到出問題的地方進行修改。如果有一個方法可以獲取到某段代碼是被哪個方法調用,并能一直回溯到最開始調用的地方(包括調用的文件,行數,參數等),這樣就能很方便的定位到出問題的地方。

php的debug_backtrace方法可以對代碼調用進行跟蹤,方便調試代碼。?


debug_backtrace 方法說明
產生一條回溯跟蹤(backtrace)

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
1
??
參數

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 ? 如果在一個函數里,這會列出函數的參數。 如果是在一個被包含的文件里,會列出包含的文件名。
1
2
3
4
5
6
7
8


實例
獲取訂單的用戶資料及用戶訊息,調用流程是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);
?>
1
2
3
4
5
6
7
8
9
??
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;

? ? }

}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
??
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;

? ? }

}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
??
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;

? ? }

}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
運行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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
可以看到調用過程是

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
————————————————
版權聲明:本文為CSDN博主「傲雪星楓」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/fdipzone/article/details/78637990

總結

以上是生活随笔為你收集整理的php 利用debug_backtrace方法跟踪代码调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女生毛片 | 欧美在线视频精品 | 99精品久久精品一区二区 | 黄色网页免费观看 | 久久久久久久久蜜桃 | 修女也疯狂3免费观看完整版 | 精品999视频| 精品美女在线 | 久久久线视频 10 | 少妇色| 日韩成人av免费在线观看 | 国产精品suv一区 | 亚洲精品一级片 | 污片免费网站 | 欧美剧场| 精品免费在线观看 | 黄色一级在线视频 | 久久综合伊人77777麻豆 | 精品视频免费看 | 日本a级无毛 | 国产精品日韩精品 | 日b视频免费看 | 黄色在线不卡 | 性生交大片免费看女人按摩 | 91久久免费 | 青青草原在线免费观看视频 | 天天操天天干天天爱 | 婷婷综合五月 | 怡红院一区二区 | 黄色一级片久久 | 中文字幕在线播放视频 | 久久99精品久久久久久园产越南 | 夜夜精品一区二区无码 | 亚洲色p| 婷婷精品一区二区三区 | a级黄色一级片 | 吊视频一区二区三区 | 五月婷婷综合在线观看 | 又黄又爽视频在线观看 | 久久天 | 这里只有精品22 | 精品麻豆 | 91免费观看视频 | 日本国产精品一区 | 日日躁夜夜躁狠狠躁 | 性生活视频软件 | 亚洲精品视频中文字幕 | 国产av精国产传媒 | 福利一区三区 | 91免费在线看 | 免费搞黄网站 | 亚洲天堂午夜 | 18男女无套免费视频 | 波多野结衣在线免费视频 | 一级全黄毛片 | 国产日韩欧美在线播放 | 久草热在线 | 欧美精品大片 | 天天爽夜夜爽人人爽 | 亚洲欧美日韩另类在线 | av电影在线不卡 | 无码国产精品一区二区免费16 | 中国黄色网页 | 91香蕉国产 | 亚洲片国产一区一级在线观看 | 91在线免费视频 | 狠狠夜夜 | 曰批视频在线观看 | 欧美黄色图片 | 69xx免费视频 | 亚洲系列在线 | 黑人巨大精品欧美黑白配亚洲 | 国产乱国产乱老熟300部视频 | 色噜噜在线观看 | 91免费版在线看 | 乌克兰少妇性做爰 | 国产精品毛片久久久 | 精品人妻一区二区三区四区久久 | 奇米色播 | 张柏芝54张无删码视频 | 久久久综合av | 日韩美女免费线视频 | 国产伦精品一区二区三区视频女 | 蜜臀999| 久久久久久天堂 | 污片在线免费观看 | 欧美伦乱 | 日韩色| 中文字幕有码在线视频 | 国产女女做受ⅹxx高潮 | 黄色大片在线免费观看 | 日本中文在线视频 | 91一级视频 | 少妇视频在线观看 | 欧洲三级在线 | 看片网站在线观看 | 亚洲AV无码片久久精品 | 99视频久久 | 91精品久久久久久久久久 |