現在大多程式都會在基本的 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]
good job
我之前都直接丟 exception. orz
原來有這比較聰明的方法,感恩感恩
exception 的做法, 我在找 LifeType 的 code 時, 也是這樣子做.. XD