久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

PHP如何打印跟蹤調試信息

本篇文章給大家介紹一下PHP打印跟蹤調試信息的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

PHP如何打印跟蹤調試信息

PHP打印跟蹤調試信息

對于大部分編譯型語言來說,比如 C 、 Java 、 C# ,我們都能很方便地進行斷點調試,但是 PHP 則必須安裝 XDebug 并且在編輯器中進行復雜的配置才能實現斷點調試的能力。不過,如果只是簡單的調試并且查看堆?;厮莸脑?,其實 PHP 已經為我們準備好了兩個函數,能夠讓我們非常方便的看到程序運行時的調用情況。

debug_backtrace()

從這個方法的字面意思上就可以看出,它的意思就是調試回溯,返回的也正是一段回溯信息的數組。

function a_test($str) {     echo "Hi: $str", PHP_EOL;     var_dump(debug_backtrace()); }  var_dump(debug_backtrace());  a_test("A");  // Hi: A/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:7: // array(1) { //   [0] => //   array(4) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(12) //     'function' => //     string(6) "a_test" //     'args' => //     array(1) { //       [0] => //       string(1) "A" //     } //   } // }

這個方法必須在函數中調用,在函數方法外部使用是不會有內容的。從內容中看,它輸出了關于這個函數的 __FILE__ 、 __LINE__ 、 __FUNCTION__ 、$argv 等信息。其實就是關于當前打印這行所在函數的相關內容。

我們當然也可以多嵌套幾層函數來看一下打印出的內容是什么。

function b_test(){     c_test(); }  function c_test(){     a_test("b -> c -> a"); }  b_test();  // Hi: b -> c -> a // /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:7: // array(3) { //   [0] => //   array(4) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(37) //     'function' => //     string(6) "a_test" //     'args' => //     array(1) { //       [0] => //       string(11) "b -> c -> a" //     } //   } //   [1] => //   array(4) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(33) //     'function' => //     string(6) "c_test" //     'args' => //     array(0) { //     } //   } //   [2] => //   array(4) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(40) //     'function' => //     string(6) "b_test" //     'args' => //     array(0) { //     } //   } // }

沒錯,數組的輸出順序就是一個棧的執行順序,b_test() 最先調用,所以它在棧底,對應的輸出也就是數組中的最后一個元素。

在類中也是類似的使用方法。

class A{     function test_a(){         $this->test_b();     }     function test_b(){         var_dump(debug_backtrace());     } }  $a = new A(); $a->test_a();  // /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:90: // array(2) { //   [0] => //   array(7) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(87) //     'function' => //     string(6) "test_b" //     'class' => //     string(1) "A" //     'object' => //     class A#1 (0) { //     } //     'type' => //     string(2) "->" //     'args' => //     array(0) { //     } //   } //   [1] => //   array(7) { //     'file' => //     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php" //     'line' => //     int(95) //     'function' => //     string(6) "test_a" //     'class' => //     string(1) "A" //     'object' => //     class A#1 (0) { //     } //     'type' => //     string(2) "->" //     'args' => //     array(0) { //     } //   } // }

在類中使用的時候,在數組項中會多出一個 object 字段,顯示的是這個方法所在類的信息。

debug_backtrace() 的函數聲明是:

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

其中 $options 是有兩個常量可以定義,DEBUG_BACKTRACE_PROVIDE_OBJECT 表明是否填充 "object" 的索引;DEBUG_BACKTRACE_IGNORE_ARGS 是否忽略 "args" 的索引,包括所有的 function/method 的參數,能夠節省內存開銷。 $limits 可用于限制返回堆棧幀的數量,默認為0返回所有的堆棧。

debug_backtrace() 以及下面要介紹的 debug_print_backtrace() 方法都是支持 require/include 文件以及 eval() 中的代碼的,在嵌入文件時,會輸出嵌入文件的路徑,這個大家可以自行嘗試。

debug_print_backtrace()

這個方法從名稱也可以看出,它會直接打印回溯內容,它的函數聲明和 debug_backtrace() 是一樣的,不過 $options 默認是 DEBUG_BACKTRACE_IGNORE_ARGS ,也就是說,它只打印調用所在文件及行數。

function a() {     b(); }  function b() {     c(); }  function c(){     debug_print_backtrace(); }  a();  #0  c() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:144] #1  b() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:140] #2  a() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調試信息.php:151]

另外就是這個函數不需要使用 var_dump() 或 print_r() 進行輸出,直接使用這個函數就會進行輸出。能夠非??旖莘奖愕淖屛覀冞M行調試,比如在 laravel 這類大型框架中,我們在控制器需要查看堆棧信息時,就可以使用 debug_print_backtrace() 快速地查看當前的堆棧調用情況。而 debug_backtrace() 如果沒有指定 $options 的話,則會占用非常大的內存容量或者無法完整顯示。

總結

今天介紹的這兩個函數能夠靈活地幫助我們調試代碼或者了解一個框架的調用情況。當然,在正式的情況下還是推薦使用 Xdebug 加上編輯器的支持來進行斷點調試,因為使用 debug_backtrace() 這兩個方法我們無法看到變量的變化情況。

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/PHP%E6%89%93%E5%8D%B0%E8%B7%9F%E8%B8%AA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF.php

推薦學習:php視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品99久久久久久董美香| a日韩av网址| 欧美xxxx中国| 精品欧美日韩精品| 久久伊人国产| 精品久久97| 国产精品久久久久久久久妇女| 精品高清久久| 日韩国产一区| 欧美特黄一级大片| 伊人久久婷婷| 蜜臀av国产精品久久久久| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品日韩精品中文字幕| 欧美一级全黄| 国产极品模特精品一二| 精品亚洲a∨| 中文字幕在线视频久| zzzwww在线看片免费| 国产99久久久国产精品成人免费| 亚洲成人精选| 欧美在线观看天堂一区二区三区| 婷婷成人在线| 牛牛精品成人免费视频| 欧洲毛片在线视频免费观看| 清纯唯美亚洲综合一区| 欧美日韩网址| 韩国精品主播一区二区在线观看| 久久久天天操| 亚洲永久字幕| 国产亚洲精品精品国产亚洲综合| 久久精品福利| 激情视频一区二区三区| 蜜桃av一区二区在线观看| 国产精品亚洲欧美| 成人影视亚洲图片在线| 欧美日韩国产免费观看视频| 亚洲aa在线| 国产探花一区在线观看| 在线亚洲人成| 亚洲人成亚洲精品| 日本欧美国产| 蜜桃一区二区三区在线观看| 国产精品一区二区av日韩在线| 日韩欧美自拍| 在线看片日韩| 麻豆国产91在线播放| 久久久精品五月天| 亚洲美女91| 成人日韩av| 亚洲黄色在线| 国产精品色在线网站| 91精品一区国产高清在线gif| 亚洲欧洲另类| 国产精品v亚洲精品v日韩精品| 久久精品不卡| 国产精品天天看天天狠| 国产精品99一区二区| 欧美亚洲综合视频| 激情久久婷婷| 国产精品美女久久久久久不卡| 亚洲无线一线二线三线区别av| 欧美日韩免费看片| 偷拍亚洲精品| 亚洲精品无吗| 国产欧美自拍| 国产不卡一区| 好吊视频一区二区三区四区| 精品网站999| 日韩综合精品| 日韩av资源网| 亚洲天堂一区二区| 日韩激情中文字幕| 国产尤物精品| 麻豆精品蜜桃视频网站| 亚洲一区免费| 日韩一区欧美| 国产精品任我爽爆在线播放 | 日韩精品视频一区二区三区| 色爱av综合网| 国产高清亚洲| 黄色亚洲免费| 日本不良网站在线观看| 国产日韩免费| 亚洲乱码视频| 亚洲一区欧美激情| 99精品视频精品精品视频| 捆绑调教美女网站视频一区| 亚洲va久久久噜噜噜久久| 欧美日韩一二| 97精品中文字幕| 国产精品伦一区二区| 蜜桃免费网站一区二区三区| 亚洲国产专区校园欧美| 水蜜桃久久夜色精品一区| 欧美日韩一区二区国产| 美日韩精品视频| 欧洲亚洲一区二区三区| 成人午夜网址| 老司机免费视频一区二区| 日本午夜精品视频在线观看| 日韩中文欧美在线| 在线 亚洲欧美在线综合一区| 亚洲精品一级二级| 精品国产一区二区三区av片| 国产亚洲精aa在线看| 日韩欧美久久| 日韩中文字幕一区二区高清99| 午夜亚洲精品| 国产模特精品视频久久久久| 激情五月色综合国产精品| 亚洲a一区二区三区| 精品视频在线你懂得| 国产精品chinese| 国产精品久久777777毛茸茸| 欧美日韩在线精品一区二区三区激情综合 | 亚洲啊v在线免费视频| 国产精品女主播一区二区三区| 欧美精品一区二区三区精品| 国产综合亚洲精品一区二| 麻豆成全视频免费观看在线看| 精品国产一区二区三区2021| 欧美激情视频一区二区三区免费| 国产精品玖玖玖在线资源| 国产精品一区亚洲| 久久尤物视频| 超级白嫩亚洲国产第一| 91亚洲国产| 不卡一二三区| 久久麻豆精品| 欧美日韩激情| 久久99伊人| 日韩中文av| 国产毛片一区二区三区| 久久超级碰碰| 精品资源在线| 亚洲精品**中文毛片| 亚洲免费播放| 国产亚洲精品美女久久久久久久久久| 国产精品qvod| 免费av一区二区三区四区| 亚洲午夜一级| 成人av动漫在线观看| 欧美日韩四区| 亚洲一区二区三区中文字幕在线观看| 亚洲免费中文| 色爱av综合网| 久久国产精品免费精品3p | 午夜在线视频一区二区区别| 蜜臀91精品一区二区三区| 日本久久二区| 精品亚洲a∨| 亚洲高清不卡| 蜜臀av亚洲一区中文字幕| 国产欧美亚洲精品a| 国产一区二区视频在线看| 成人va天堂| 蜜桃久久精品一区二区| 国产视频一区二区在线播放| 日本欧美国产| 99亚洲视频| 久久激情五月激情| 久久毛片亚洲| 成人av二区| 日本va欧美va瓶| 久久这里只有| 狠狠色综合网| 久久国产三级| 欧洲av不卡| 中文字幕免费一区二区| 久久精品欧洲| 麻豆精品91| 精品国产一区二区三区噜噜噜| 国产精品外国| 亚洲欧美日韩国产一区二区| 欧美亚洲人成在线| 国产精品二区不卡| 中文一区二区| 日韩精品高清不卡| 国产精品99在线观看| 国产精品嫩草99av在线| 欧美午夜三级| 在线一区视频观看| 日本亚州欧洲精品不卡| 色爱综合网欧美| 中文字幕av一区二区三区人| 国产91欧美| 一本一道久久a久久| 精品欠久久久中文字幕加勒比| 中文久久精品| 日本一区二区免费高清| 免费成人在线视频观看| 日本欧美国产| 鲁大师影院一区二区三区| 精品美女久久| 日本一区中文字幕| 亚洲一级高清| 国产精品xxxav免费视频| 欧美精品黄色| 久久亚洲精精品中文字幕|