很多php程式設計師除錯使用echo、print_r()、var_dump()、printf()等,雖然對於有較豐富開發經驗的程式設計師來說這些也已經足夠了,他們往往可以在程式執行的過程中,通過輸出特定變數的值可以判斷程式執行是否正確,甚至效率高低也可以看出來(當然可能還需要使用一些時間函式)。那麼我們為什麼還需要乙個專門的除錯程式來監控我們的程式執行呢?
在我們平時的php開發中,乙個大的專案經過長時間的積累以後你會發現效能越來越慢,而效能到底消耗在了什麼地方,常常是乙個令人頭疼的問題,function a()呼叫了多少次,function b()又消耗了多少時間,我們到底怎麼查詢是哪個蛀蟲拉慢了我們的程式執行速度呢?在這裡給大家介紹一款工具xdebug,相信很多人已經聽說過了,希望借助這個工具我們可以起到簡單分析php程式效能瓶頸的問題。
xdebug是什麼
xdebug是乙個開放源**的php程式偵錯程式(即乙個debug工具),可以用來跟蹤,除錯和分析php程式的執行狀況。
安裝xdebug
1
[xdebug]
2
zend_extension =
"/home/ad/php/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
3
xdebug.auto_trace = on
4
xdebug.auto_profile = on
5
xdebug.collect_params = on
6
xdebug.collect_return = on
7
xdebug.profiler_enable = on
8
xdebug.trace_output_dir =
"/home/ad/xdebug_log"
9
xdebug.profiler_output_dir =
"/home/ad/xdebug_log"
xdebug引數簡介:
重啟apache。
寫乙個test.php,內容為<?php phpinfo(); ?>,如果輸出的內容中有看到xdebug,說明安裝配置成功。或者去/home/ad/xdebug_log下看看是不是日誌已經出來了。
設定選項
category
setting
description
日誌xdebug.trace_output_dir
日誌追蹤輸出目錄
xdebug.trace_output_name
日誌檔名,xdebug提供了一系列的識別符號,生成相應格式的檔名,具體請參考官網
xdebug.trace_options
記錄新增到檔案中方式:1 = 追加(如果存在該檔案). 0 (default) = 覆蓋(如果存在該檔案)
顯示資料
xdebug.collect_params
非零值 = 控制function的引數顯示選項
xdebug.collect_return
1 = 顯示function返回值. default 0 不顯示
xdebug.collect_vars
1 = 顯示當前作用域使用了哪些變數,顯示變數名,該選項不會記錄變數的值,如果需要,使用xdebug.collect_params
xdebug.collect_assignments
1 = 新增一行顯示變數賦值(若為1,形如$a = 1;這類assignment expression會在trace檔案裡顯示)
格式xdebug.trace_format
xdebug.show_mem_delta
1 = 顯示每次函式呼叫記憶體消耗(記憶體差)
行為 xdebug.auto_trace
1 = 開啟自動追蹤. (追蹤方式有2種,一種是自動追蹤,所有php指令碼執行時,都會產生trace檔案;另一種是觸發方式追蹤,如下)
xdebug.trace_enable_trigger[2]
1 = 使用 xdebug_trace get/post 觸發追蹤, 或者通過設定cookie xdebug_trace. 為了避免每次請求時,都會生成相應trace追蹤檔案,你需要把auto_trace設定為0
注:該特性只在2.2+版本才能設定
[xdebug-general] re: is trace_enable_trigger defunct? 限制
xdebug.var_display_max_depth
陣列和物件元素顯示深度:主要用在陣列巢狀,物件屬性巢狀時,顯示幾級的元素內容. default 3.
xdebug.var_display_max_data
變數值為字串時顯示多長. default 512.
xdebug.var_display_max_children
陣列和物件元素顯示的個數. default 128
一些自定義函式
function
description
void xdebug_enable()
手動開啟,相當於xdebug.default_enable=on
void var_dump()
覆寫php提供的var_dump,出錯時,顯示函式堆疊資訊,(前提:php.ini裡html_errors為1),使用xdebug.overload_var_dump 設定是否覆寫
void xdebug_start_trace(
string trace_file_path
[, integer options] )
xdebug_trace_computerized:
xdebug_trace_html: 4 = 輸出html**,瀏覽器開啟為一table
void xdebug_stop_trace()
停止追蹤,**追蹤在該行停止
string xdebug_get_tracefile_name()
獲得輸出檔名,與 xdebug.auto_trace配合使用.
void xdebug_var_dump([mixed var[,...]])
輸出變數詳細資訊,相當於php裡的var_dump,具體顯示請看這裡
xdebug.show_local_vars
預設為0,不顯示;非零時,在php執行出錯時,顯示出錯**所在作用域所有本地變數(注:這會產生大量資訊,因此預設是closed),具體顯示差別如下圖[3]
array xdebug_get_declared_vars()
顯示當前作用域中已宣告的變數
array xdebug_get_code_coverage()
顯示某一段**內,**執行到哪些行[4]
關於xdebug.trace_format=1,如果你使用觸發方式啟用**追蹤:(xdebug.auto_trace = 0;xdebug.trace_enable_trigger = 1),那麼,你可以在url裡新增xdebug_trace,例如:localhost/test.php?xdebug_trace,或者localhost任意值)。
是不是覺得很麻煩,那麼裝個外掛程式,讓它來幫你。chrome xdebug helper,使用它,你可以切換3種狀態,disabled ,debugging enabled,profiling enabled(下篇詳細介紹),然後切換到debugging enabled。執行該指令碼,(去掉url裡的?xdebug_trace),就可以**跟蹤了。
使用xdebug_start_trace()和xdebug_stop_trace()可以手動追蹤你的**執**況。
1
xdebug_start_trace();
2
//your code required to trace
3
xdebug_stop_trace();
設定 xdebug.auto_trace = 1 將在執行所有 php 指令碼之前先啟用自動跟蹤。另外,您可以通過**設定 xdebug.auto_trace = 0,並分別使用 xdebug_start_trace() 和 xdebug_stop_trace() 函式啟用和禁用跟蹤。但是,如果 xdebug.auto_trace 為 1,則可以在包括配置好的 auto_prepend_file 之前先啟動跟蹤。
選項 xdebug.trace_ouput_dir 和 xdebug.trace_output_name 用於控制儲存跟蹤輸出的位置。在這裡,所有檔案都被儲存到 /tmp/traces 中,並且每個跟蹤檔案都以 trace 為開頭,後接 php 指令碼的名稱(%s)以及程序 id(%p)。所有 xdebug 跟蹤檔案都以 .xt 字尾結尾。
預設情況下,xdebug 將顯示時間、記憶體使用量、函式名和函式呼叫深度字段。如果將 xdebug.trace_format 設為 0,則輸出將符合人類閱讀習慣(將引數設為 1 則為機器可讀格式)。此外,如果指定 xdebug.show_mem_delta = 1,則可以檢視記憶體使用量是在增加還是在減少,而如果指定 xdebug.collect_params = 4,則可以檢視傳入引數的型別和值。要監視每個函式返回的值,請設定 xdebug.collect_return = 1。
PHP除錯利器XDebug的安裝與使用
很多php程式設計師除錯使用echo print r var dump printf 等,雖然對於有較豐富開發經驗的程式設計師來說這些也已經足夠了,他們往往可以在程式執行的過程中,通過輸出特定變數的值可以判斷程式執行是否正確,甚至效率高低也可以看出來 當然可能還需要使用一些時間函式 那麼我們為什麼還...
PHP除錯利器XDebug的安裝與使用
很多php程式設計師除錯使用echo print r var dump printf 等,雖然對於有較豐富開發經驗的程式設計師來說這些也已經足夠了,他們往往可以在程式執行的過程中,通過輸出特定變數的值可以判斷程式執行是否正確,甚至效率高低也可以看出來 當然可能還需要使用一些時間函式 那麼我們為什麼還...
xdebug除錯php程式
xdebug.default enable 1 預設是1,當錯誤出現時,堆疊跟蹤會啟用。可以在 中通過xdebug disable 來關閉它。xdebug.force display errors 0 預設是0,如果設定為1,錯誤總是會被展示,不管php的display errors是怎麼設定的。x...