php使用xdebug除錯
阿新 • • 發佈:2019-02-07
以前除錯一直用var_dump();die;一行行列印,效率太低。一直知道有xdebug這個拓展,從來沒有深入瞭解過,今天詳細的試用了一下,覺得這才是現代的除錯方式。
xdebug主要有兩個作用,一個是做能效(主要是各個節點的執行時間)分析(profile);一個是做函式追蹤除錯(trace);
配置簡介
大致來說所有以xdebug.profiler_*開頭的配置都與效能分析有關,效能分析結合 webgrind,可以追蹤每個函式的執行時間。具體的使用配置參考 webgrind安裝使用詳細說明;
xdebug.trace_*開頭的配置與追蹤功能有關;
xdebug.remote_*開頭的配置與遠端除錯有關,有興趣的話可以試試在notepade++上安裝外掛後對php經行斷點除錯,第一次發現還能這麼玩,挺有意思的。 How_to_Setup_BDGp_debugger_in_Notepad++to_Debug_PHP先貼個連結有人感興趣的話再寫;
xdebug追蹤除錯
安裝xdebug後,開啟php.ini,新增如下配置(其他均使用預設值,不用填寫):
;安裝的拓展位置
zend_extension = "E:\xampp\php\ext\php_xdebug.dll"
;程式碼跟蹤日誌檔案位置,注意要先新建這個traces目錄,並設定777
xdebug.trace_output_dir = "E:\xampp\tmp"
;程式碼跟蹤日誌檔案格式(%R表示按$_SERVER[‘REQUEST_URI’]輸出日誌檔名)
xdebug.trace_output_name = "trace.%R"
;當在函式軌跡或堆疊軌跡中記錄一個函式呼叫時,控制Xdebug是否應該蒐集傳遞給函式的引數。4表示顯示完整變數內容和名稱
xdebug.collect_params = 4
;預設為1, 控制Xdebug是否應該將在include(), include_once(), require()或require_once()函式中使用的檔名寫入追蹤檔案。
xdebug.collect_includes = On
;預設值為0,控制Xdebug是否應該將函式呼叫的返回值寫入軌跡檔案。建議開啟。
xdebug.collect_return = On
然後配合函式
xdebug_start_trace();
/* 業務程式碼 */
xdebug_stop_trace();
就可以在任意段落打印出程式碼的執行情況了。
開啟上面配置的輸入檔案,我的是trace._bbs_forum_php_mod=forumdisplay_fid=2.xt
時間索引 記憶體使用 層級 函式名(函式返回值) 檔名 行號
0.0330 1587480 -> loadforum() E:\xampp\htdocs\bbs\forum.php:54
0.0330 1587744 -> getgpc($k = 'tid', $type = ???) E:\xampp\htdocs\bbs\source\function\function_forum.php:399
0.0330 1587840 -> strtoupper('GP') E:\xampp\htdocs\bbs\source\function\function_core.php:109
>=> 'GP'
>=> NULL
0.0330 1587856 -> intval(NULL) E:\xampp\htdocs\bbs\source\function\function_forum.php:399
>=> 0
當然你也可以通過自動促發追蹤整個頁面的執行情況
;預設0,當為1是自動追蹤整個頁面的執行情況,無需用xdebug_start_trace();xdebug_stop_trace();函式設定斷點。
xdebug.auto_trace=1
;或者開啟,預設0,當此引數設定為1時, 可以在頁面url後新增?XDEBUG_TRACE引數觸發軌跡檔案的生成。 這會將軌跡資料寫入軌跡檔案目錄。 如果要阻止Xdebug生成軌跡檔案,你需要設定 xdebug.auto_trace引數為0。
xdebug.trace_enable_trigger=1
我發現自己還是蠻喜歡折騰這些工具的,喜好勝過寫程式碼-:(。
附上xdebug配置詳細引數