星期二, 十二月 02, 2008

PHP 追蹤此 函數 被哪些 function 呼叫來使用過

現在大多程式都會在基本的 Libaray 上, 多包上幾層的 function 後再來使用, 但是要 Debug 時, 要如何知道在 call 此 function 前, 到底是哪個 function 呼叫到你, 呼叫到你之前, 到底有經過幾個 function? 怎麼印出從剛開始一直到呼叫你這個 function 前的所有 function list?

Debug back trace function

在之前都是透過 debug_backtrace() 來寫個簡易的 function 來追蹤, ex:

<?php
function get_backtrace()
{
    $history = debug_backtrace();
    $msg = '';

    foreach ($history as $i => $line) {
        $msg .= "#$i {$line['function']}() called at [{$line['file']}:{$line['line']}]\n" ;
     }

    return $msg;
}
?>

現在發現有更簡單的 debug_print_backtrace() 可以用, 連之前的 function 都不用寫了~

使用範例

<?php
function a() {
    b();
}

function b() {
    c();
}

function c(){
    debug_print_backtrace();                                                                                                
    // print_r(get_backtrace()); // 要用這個記得把上面的 function 加進來.
}

a();
?>

debug_print_backtrace() 的結果

  • #0  c() called at [/tmp/a.php:7]
  • #1  b() called at [/tmp/a.php:3]
  • #2  a() called at [/tmp/a.php:15]

get_backtrace() 的結果

  • #0 get_backtrace() called at [/tmp/a.php:12]
  • #1 c() called at [/tmp/a.php:7]
  • #2 b() called at [/tmp/a.php:3]
  • #3 a() called at [/tmp/a.php:15]
相關標籤

this is comment icon [回覆]

good job
Comment by ezboy (12/02/2008 10:19)

this is comment icon [回覆]

我之前都直接丟 exception. orz 原來有這比較聰明的方法,感恩感恩
Comment by hychen (12/02/2008 10:24)

this is comment icon 回 hychen [回覆]

exception 的做法, 我在找 LifeType 的 code 時, 也是這樣子做.. XD

Comment by Tsung (12/02/2008 13:30)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~