http://blog.sina.com.cn/s/blog_4f9fc6e10100rhn5.html
今天網站出現一個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:\wamp\www\meilele\includes\cls_mysql.php:471行,調用方法:query
D:\wamp\www\meilele\includes\cls_mysql.php:507行,調用方法:getAll
D:\wamp\www\meilele\includes\lib_common.php:732行,調用方法:getAllCached
D:\wamp\www\meilele\includes\init.php:113行,調用方法:load_config
D:\wamp\www\meilele\index.php:4行,調用方法:include_once
一目瞭然,一直找到了入口,太強悍了。以後調試又多了一種辦法
或者用下面的方法:
$e = new Exception;var_dump($e->getTraceAsString());