PHP列印呼叫函式入口地址(堆疊),方便調式

孤劍發表於2014-07-01

今天網站出現一個BUG,然後直接在資料庫類裡面寫日誌,看是哪條SQL出了問題,SQL語句到是找到了,但是不知道這條SQL語句來自何處,於是就想啊,如果能有一個辦法,檢視當前正在執行的這個方法是被哪個方法呼叫的,以及上一個方法又是哪個方法呼叫的,以此類推,找到入口地址多好啊。不過以前自己也想過,也在網上去搜過,就是沒有找到相關的辦法,今天一同事(前輩)說JAVA裡面這種除錯用得很普遍,叫這種堆疊除錯,我是就在網上搜PHP堆疊。居然被我找到了,然後把自己的辦法寫出來。

//呼叫堆疊函式,查詢呼叫函式的源頭,方便除錯
function print_stack_trace()
{
    $array =debug_backtrace();
  //print_r($array);//資訊很齊全
   unset($array[0]);
   foreach($array as $row)
    {
       $html .= $row[`file`].`:`.$row[`line`].`行,呼叫方:`.$row[`function`]."<p>";
    }
    return $html;
}

 

我在我的資料庫的核心查詢函式裡面呼叫這個方法,列印結果如下:

D:wampwwwmeileleincludescls_mysql.php:471行,呼叫方法:query
D:wampwwwmeileleincludescls_mysql.php:507行,呼叫方法:getAll
D:wampwwwmeileleincludeslib_common.php:732行,呼叫方法:getAllCached
D:wampwwwmeileleincludesinit.php:113行,呼叫方法:load_config
D:wampwwwmeileleindex.php:4行,呼叫方法:include_once

 

一目瞭然,一直找到了入口,太強悍了。以後除錯又多了一種辦法


相關文章