2012-02-14

【程式】PHP : debug_backtrace - Generates a backtrace


最近看到error log,有一些錯誤,是參數傳到空的…
但又不知道是那裡傳進來的…
所以就要想辦法來trace,到底是誰Call 了 X function.
一直以為只有 php 5.3.0 以上才會有這個功能。
ex : get_called_class
但Google後,才知道,早就有這種類似的功能了。

debug_print_backtrace
上面這個function,會直接print 結果在網頁上。
在開發時,很方便,但…上線的環境就不適合啦。

debug_backtrace
所以我是使用這一個 function。
然後存到 error_log 裡。
debug_backtrace 的網頁中有人有貼一段code,挺不錯用的。
把需要的資訊都印出來了,所以我就直接貼這段程式出來啦。
改成存到 error_log 中。
error_log("In X Function: Miss Args: " . Zend_Registry::get('ID'));
$backtracel = "\n";
foreach(debug_backtrace() as $k=>$v){
    if($v['function'] == "include" || $v['function'] == "include_once" || $v['function'] == "require_once" || $v['function'] == "require"){ 
        $backtracel .= "#".$k." ".$v['function']."(".$v['args'][0].") called at [".$v['file'].":".$v['line']."]\n"; 
    }else{ 
        $backtracel .= "#".$k." ".$v['function']."() called at [".$v['file'].":".$v['line']."]\n"; 
    } 
} 
error_log($backtracel);
我在前面先用 Zend_Registry::set('ID', $ID);
將 ID 的值先存下來,
出錯時,就可以用Zend_Registry::get('ID')印出來,
就知道是那個ID的時候,會沒有傳值進去。

還不錯用。



0 comments:

張貼留言