欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP如何打印跟蹤調(diào)試信息

 更新時(shí)間:2021年04月27日 09:02:39   作者:硬核項(xiàng)目經(jīng)理  
這篇文章主要介紹了PHP如何打印跟蹤調(diào)試信息,幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下

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

debug_backtrace()

從這個(gè)方法的字面意思上就可以看出,它的意思就是調(diào)試回溯,返回的也正是一段回溯信息的數(shù)組。

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打印跟蹤調(diào)試信息.php:7:
// array(1) {
//   [0] =>
//   array(4) {
//     'file' =>
//     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php"
//     'line' =>
//     int(12)
//     'function' =>
//     string(6) "a_test"
//     'args' =>
//     array(1) {
//       [0] =>
//       string(1) "A"
//     }
//   }
// }

這個(gè)方法必須在函數(shù)中調(diào)用,在函數(shù)方法外部使用是不會(huì)有內(nèi)容的。從內(nèi)容中看,它輸出了關(guān)于這個(gè)函數(shù)的 __FILE__ 、 __LINE__ 、 __FUNCTION__ 、$argv 等信息。其實(shí)就是關(guān)于當(dāng)前打印這行所在函數(shù)的相關(guān)內(nèi)容。

我們當(dāng)然也可以多嵌套幾層函數(shù)來看一下打印出的內(nèi)容是什么。

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打印跟蹤調(diào)試信息.php:7:
// array(3) {
//   [0] =>
//   array(4) {
//     'file' =>
//     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.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打印跟蹤調(diào)試信息.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打印跟蹤調(diào)試信息.php"
//     'line' =>
//     int(40)
//     'function' =>
//     string(6) "b_test"
//     'args' =>
//     array(0) {
//     }
//   }
// }

沒錯(cuò),數(shù)組的輸出順序就是一個(gè)棧的執(zhí)行順序,b_test() 最先調(diào)用,所以它在棧底,對(duì)應(yīng)的輸出也就是數(shù)組中的最后一個(gè)元素。

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

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打印跟蹤調(diào)試信息.php:90:
// array(2) {
//   [0] =>
//   array(7) {
//     'file' =>
//     string(93) "/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.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打印跟蹤調(diào)試信息.php"
//     'line' =>
//     int(95)
//     'function' =>
//     string(6) "test_a"
//     'class' =>
//     string(1) "A"
//     'object' =>
//     class A#1 (0) {
//     }
//     'type' =>
//     string(2) "->"
//     'args' =>
//     array(0) {
//     }
//   }
// }

在類中使用的時(shí)候,在數(shù)組項(xiàng)中會(huì)多出一個(gè) object 字段,顯示的是這個(gè)方法所在類的信息。

debug_backtrace() 的函數(shù)聲明是:

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

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

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

debug_print_backtrace()

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

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打印跟蹤調(diào)試信息.php:144]
#1  b() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:140]
#2  a() called at [/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202004/source/PHP打印跟蹤調(diào)試信息.php:151]

另外就是這個(gè)函數(shù)不需要使用 var_dump() 或 print_r() 進(jìn)行輸出,直接使用這個(gè)函數(shù)就會(huì)進(jìn)行輸出。能夠非??旖莘奖愕淖屛覀冞M(jìn)行調(diào)試,比如在 laravel 這類大型框架中,我們?cè)诳刂破餍枰榭炊褩P畔r(shí),就可以使用 debug_print_backtrace() 快速地查看當(dāng)前的堆棧調(diào)用情況。而 debug_backtrace() 如果沒有指定 $options 的話,則會(huì)占用非常大的內(nèi)存容量或者無法完整顯示。

總結(jié)

今天介紹的這兩個(gè)函數(shù)能夠靈活地幫助我們調(diào)試代碼或者了解一個(gè)框架的調(diào)用情況。當(dāng)然,在正式的情況下還是推薦使用 Xdebug 加上編輯器的支持來進(jìn)行斷點(diǎn)調(diào)試,因?yàn)槭褂?debug_backtrace() 這兩個(gè)方法我們無法看到變量的變化情況。

測試代碼:

github.com/zhangyue050…

以上就是PHP如何打印跟蹤調(diào)試信息的詳細(xì)內(nèi)容,更多關(guān)于PHP打印調(diào)試信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PHP中soap的用法實(shí)例

    PHP中soap的用法實(shí)例

    這篇文章主要介紹了PHP中soap的用法,實(shí)例講述了PHP使用soap的兩種方式,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • php讀取目錄所有文件信息dir示例

    php讀取目錄所有文件信息dir示例

    這篇文章主要介紹了php讀取目錄所有文件信息dir實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-03-03
  • php數(shù)組保存文本與文本反編成數(shù)組實(shí)例

    php數(shù)組保存文本與文本反編成數(shù)組實(shí)例

    這篇文章主要介紹了php數(shù)組保存文本與文本反編成數(shù)組的方法,通過兩個(gè)自定義函數(shù)string2array與array2string實(shí)例展示了php數(shù)組保存文本與文本反編成數(shù)組的實(shí)現(xiàn)方法,具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • 解析MySql與Java的時(shí)間類型

    解析MySql與Java的時(shí)間類型

    本篇文章是對(duì)MySql與Java的時(shí)間類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP的Trait機(jī)制原理與用法分析

    PHP的Trait機(jī)制原理與用法分析

    這篇文章主要介紹了PHP的Trait機(jī)制原理與用法,結(jié)合實(shí)例形式分析了PHP Trait機(jī)制的基本功能、原理及簡單使用技巧,需要的朋友可以參考下
    2019-10-10
  • php設(shè)置靜態(tài)內(nèi)容緩存時(shí)間的方法

    php設(shè)置靜態(tài)內(nèi)容緩存時(shí)間的方法

    這篇文章主要介紹了php設(shè)置靜態(tài)內(nèi)容緩存時(shí)間的方法,涉及針對(duì)header函數(shù)中參數(shù)的應(yīng)用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • PHP輸出一個(gè)等腰三角形的方法

    PHP輸出一個(gè)等腰三角形的方法

    這篇文章主要介紹了PHP輸出一個(gè)等腰三角形的方法,涉及php中循環(huán)語句的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • PHP使用in_array函數(shù)檢查數(shù)組中是否存在某個(gè)值

    PHP使用in_array函數(shù)檢查數(shù)組中是否存在某個(gè)值

    這篇文章主要介紹了PHP使用in_array函數(shù)檢查數(shù)組中是否存在某個(gè)值,較為詳細(xì)的分析了in_array函數(shù)的功能、定義及相關(guān)的使用技巧與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • PHP實(shí)現(xiàn)簡單的協(xié)程任務(wù)調(diào)度demo示例

    PHP實(shí)現(xiàn)簡單的協(xié)程任務(wù)調(diào)度demo示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)簡單的協(xié)程任務(wù)調(diào)度demo,結(jié)合實(shí)例形式詳細(xì)分析了PHP基于協(xié)程的任務(wù)調(diào)度基本原理、定義及使用技巧,需要的朋友可以參考下
    2020-02-02
  • PHP JSON格式數(shù)據(jù)交互實(shí)例代碼詳解

    PHP JSON格式數(shù)據(jù)交互實(shí)例代碼詳解

    此前我寫了不少在PHP網(wǎng)站開發(fā)中應(yīng)用XML進(jìn)行數(shù)據(jù)交互的實(shí)例,這兩天通過PHP解析JSON并進(jìn)行交互的實(shí)例學(xué)習(xí)和了解了JSON在PHP中的應(yīng)用,感覺非常方便。
    2011-01-01

最新評(píng)論