久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

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

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

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

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

      對(duì)于大部分編譯型語(yǔ)言來(lái)說(shuō),比如 C 、 Java 、 C# ,我們都能很方便地進(jìn)行斷點(diǎn)調(diào)試,但是 PHP 則必須安裝 XDebug 并且在編輯器中進(jìn)行復(fù)雜的配置才能實(shí)現(xiàn)斷點(diǎn)調(diào)試的能力。不過(guò),如果只是簡(jiǎn)單的調(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ù)來(lái)看一下打印出的內(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) { //     } //   } // }

      沒(méi)錯(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)存開(kā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() 是一樣的,不過(guò) $options 默認(rèn)是 DEBUG_BACKTRACE_IGNORE_ARGS ,也就是說(shuō),它只打印調(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)行輸出。能夠非常快捷方便的讓我們進(jìn)行調(diào)試,比如在 laravel 這類大型框架中,我們?cè)诳刂破餍枰榭炊褩P畔r(shí),就可以使用 debug_print_backtrace() 快速地查看當(dāng)前的堆棧調(diào)用情況。而 debug_backtrace() 如果沒(méi)有指定 $options 的話,則會(huì)占用非常大的內(nèi)存容量或者無(wú)法完整顯示。

      總結(jié)

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

      測(cè)試代碼:

      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

      推薦學(xué)習(xí):php視頻教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)