1. 程式人生 > >php使用xdebug除錯

php使用xdebug除錯

以前除錯一直用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配置詳細引數