本節介紹Xdebug中可用的所有可用配置設置。
相關設置
如果此設置為1,則Xdebug將在CLI模式下和輸出為tty時為var_dumps和堆棧跟蹤輸出着色。在Windows上, 需要安裝ANSICON工具。
如果設置為2,則Xdebug將始終為var_dumps和堆棧跟蹤着色,無論它是連接到tty還是安裝了ANSICON。在這種情況下,您最終可能會看到轉義碼。
有關更多信息,請參閱此文章。
此設置默認為0,控制Xdebug是否應向函數跟蹤添加變量賦值。
從Xdebug 2.6開始,=&
還包括了by-var()賦值。
此設置默認為0,控制Xdebug是否應該在函數跟蹤或堆棧跟蹤中記錄函數調用時收集傳遞給函數的參數。
該設置默認為0,因為對於非常大的腳本,它可能使用大量內存,因此無法運行巨大的腳本。您可以最安全地打開此設置,但是在腳本中可能會出現一些問題,其中包含大量函數調用和/或大量數據結構作為參數。Xdebug 2不會因內存使用量增加而出現此問題,因為它永遠不會將此信息存儲在內存中。相反,它只會被寫入磁盤。這意味着您需要查看磁盤使用情況。
此設置可以有四個不同的值。對於每個值,顯示不同數量的信息。您將在下面看到每個值提供的信息。另請參閱Stack Traces功能的介紹,以 獲取一些屏幕截圖。
值 | 顯示的參數信息 |
---|---|
0 | 沒有。 |
1 | 元素的類型和數量(fe string(6),array(8))。 |
2 | 元素的類型和數量,以及完整信息的工具提示1。 |
3 | 完整變量內容(具有xdebug.var_display_max_children,xdebug.var_display_max_data和xdebug.var_display_max_depth設置的限制。 |
4 | 完整的變量內容和變量名稱。 |
五 | PHP序列化變量內容,沒有名稱。(Xdebug 2.3中的新功能) |
1在PHP的CLI版本,它不會有刀尖,也不在輸出文件。
此設置默認為0,控制Xdebug是否應將函數調用的返回值寫入跟蹤文件。
對於計算機化的跟蹤文件(xdebug.trace_format = 1),這僅適用於Xdebug 2.3以上版本。
*可以是COOKIE,FILES,GET,POST,REQUEST,SERVER,SESSION中的任何一個。當出現錯誤情況時,這七個設置控制來自超全局的數據。
這些php.ini設置中的每一個都可以包含來自此超全局轉儲的變量的逗號分隔列表,或者*
包含所有變量。確保在此設置中不添加空格。
要在發生錯誤時轉儲REMOTE_ADDR和REQUEST_METHOD以及所有GET參數,請添加以下設置:
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD xdebug.dump.GET = *
此設置確定在使用文件名的堆棧跟蹤顯示中生成的鏈接的格式。這允許IDE設置鏈接協議,通過單擊Xdebug在堆棧跟蹤中顯示的文件名,可以直接轉到行和文件。示例格式可能如下所示:
myide://%F @%L
可能的格式說明符是:
符 | 含義 |
---|---|
%F | 文件名 |
%L | 行號 |
對於各種IDE / OS,有一些說明如何使這項工作:
Linux上的Firefox
- 打開about:config
- 添加一個新的布爾設置“network.protocol-handler.expose.xdebug”並將其設置為“false”
- 將以下內容添加到shell腳本中
~/bin/ff-xdebug.sh
:#!/ bin / sh的 f =`echo $ 1 | cut -d @ -f 1 | sed's / xdebug:\ / \ ///'` l =`echo $ 1 | 切-d @ -f 2`
添加到那個(取決於你是否有komodo,gvim或netbeans):komodo $f -l $l
gvim --remote-tab +$l $f
netbeans "$f:$l"
- 使腳本可執行
chmod +x ~/bin/ff-xdebug.sh
- 將xdebug.file_link_format設置為
xdebug://%f@%l
Windows和netbeans
- 創建文件
netbeans.bat
並將其保存在您的路徑中(C:\Windows
將起作用):@echo關閉 setlocal enableextensions enabledelayedexpansion 設置NETBEANS =%1 設置FILE =%~2 %NETBEANS% - nosplash --console suppress --open“%FILE:~19%” nircmd win激活進程netbeans.exe
注意:如果沒有,請刪除最后一行
nircmd
。 - 將以下代碼保存為
netbeans_protocol.reg
:Windows注冊表編輯器版本5.00 [HKEY_CLASSES_ROOT \ netbeans的] “網址協議”=“” @ =“URL:Netbeans協議” [HKEY_CLASSES_ROOT \ netbeans的\的DefaultIcon] @ =“\”C:\\ Program Files \\ NetBeans 7.1.1 \\ bin \\ netbeans.exe,1 \“” [HKEY_CLASSES_ROOT \ netbeans的\殼] [HKEY_CLASSES_ROOT \ netbeans的\殼\開放] [HKEY_CLASSES_ROOT \ netbeans的\殼\開放\命令] @ =“\”C:\\ Windows \\ netbeans.bat \“\”C:\\ Program Files \\ NetBeans 7.1.1 \\ bin \\ netbeans.exe \“\”%1 \“”
注意:確保將路徑更改為Netbeans(兩次),以及
netbeans.bat
批處理文件,如果您將其保存在其他位置C:\Windows\
。 - 雙擊該
netbeans_protocol.reg
文件將其導入注冊表。 - 將xdebug.file_link_format設置為
xdebug.file_link_format = "netbeans://open/?f=%f:%l"
此設置確定Xdebug ...%s%n
通過重載的xdebug_var_dump()(默認值 :)在HTML堆棧跟蹤(默認值:)和位置信息中呈現文件名的格式%f
。
此表中列出了可能的格式說明符。示例輸出根據完整路徑呈現 /var/www/vendor/mail/transport/mta.php
。
符 | 含義 | 示例輸出 |
---|---|---|
%一種 | Ancester:兩個目錄元素和文件名 | mail/transport/mta.php |
%F | 完整路徑 | /var/www/vendor/mail/transport/mta.php |
%N | 名稱:僅文件名 | mta.php |
%p | 父:一個目錄元素和文件名 | transport/mta.php |
%S | 目錄分隔符 | \ 在Linux,OSX和其他類Unix系統上,/ 在Windows上 |
如果將此設置設置為,1
則無論PHP的display_errors設置如何,都將始終顯示錯誤 。
此設置是一個位掩碼,如error_reporting。該位掩碼將與error_reporting to dermine 表示的位掩碼邏輯OR運算,應顯示錯誤。此設置只能在php.ini中進行,並允許您強制顯示某些錯誤,無論應用程序使用ini_set()做什么。
此設置允許您配置一個掩碼,用於確定是否以及哪些通知和/或警告轉換為錯誤。您可以配置由PHP生成的通知和警告,以及您自己生成的通知和警告(通過trigger_error())。例如,要將strlen()(不帶參數)的警告轉換為錯誤,您可以執行以下操作:
ini_set('xdebug.halt_level',E_WARNING); 的strlen(); 回聲“嗨!\ n”;
然后,這將導致顯示錯誤消息和腳本的中止。echo "Hi!\n";
不會被執行。
該設置是一個位掩碼,因此要將所有通知和警告轉換為所有應用程序的錯誤,您可以在php.ini中設置:
xdebug.halt_level = E_WARNING | E_NOTICE | E_USER_WARNING | E_USER_NOTICE
位掩碼僅支持上面提到的四個級別。
控制無限遞歸保護的保護機制。此設置的值是在中止腳本之前允許的嵌套函數的最大級別。
在Xdebug 2.6之前,如果超出,這將產生致命的異常。從Xdebug 2.6及更高版本開始,將引發“ 錯誤 ”異常。
在Xdebug 2.3之前,默認值為100
。
控制堆棧跟蹤中顯示的堆棧幀數,在PHP錯誤堆棧跟蹤期間在命令行上以及在HTML跟蹤的瀏覽器中顯示。
默認情況下,當html_errors php.ini設置為1
或時,Xdebug會使用自己的改進版本重載var_dump()以顯示變量 2
。如果你不想這樣,你可以將此設置設置為0
,但首先檢查是否關閉html_errors並不聰明。
您還可以2
將此設置用作值。除了很好地格式化var_dump()輸出外,它還會在輸出中添加文件名和行號。該xdebug.file_link_format設置也很尊敬。(Xdebug 2.3中的新功能)
在Xdebug 2.4之前,此設置的默認值為 1
。
.cachegrind.aggregate
。您需要移動此文件以獲取另一輪聚合數據。
此設置確定用於將跟蹤轉儲到的文件的名稱。該設置指定格式說明符的格式,與sprintf()和strftime()非常相似。有幾種格式說明符可用於格式化文件名。
有關支持的說明符,請參閱xdebug.trace_output_name文檔。
如果啟用,則忽略xdebug.remote_host設置,Xdebug將嘗試連接到發出HTTP請求的客戶端。它檢查$ _SERVER ['HTTP_X_FORWARDED_FOR']和$ _SERVER ['REMOTE_ADDR']變量以找出要使用的IP地址。
如果配置了xdebug.remote_addr_header,則將在$ _SERVER ['HTTP_X_FORWARDED_FOR']和$ _SERVER ['REMOTE_ADDR']變量之前檢查具有已配置名稱的$ SERVER變量。
此設置不適用於通過CLI進行調試,因為$ SERVER標頭變量在那里不可用。
請注意,沒有可用的過濾器,任何可以連接到Web服務器的人都可以啟動調試會話,即使他們的地址與xdebug.remote_host不匹配 。
可以是'php3',它選擇舊的PHP 3樣式調試器 輸出,'gdb',它啟用GDB,如調試器接口或'dbgp' - 調試器協議。DBGp協議是唯一受支持的協議。
注意:Xdebug 2.1及更高版本僅支持'dbgp'作為協議。
選擇運行調試客戶端的主機,您可以使用主機名,IP地址或Unix域套接字的“unix:/// path / to / sock”。如果啟用了xdebug.remote_connect_back,則忽略此設置。
Xdebug 2.6中引入了對Unix域套接字的支持。
登錄於2007-05-27 14:28:15開放 - > <init xmlns =“urn:debugger_protocol_v1”xmlns:xdebug =“http://xdebug.org/dbgp/x ... ight> </ init> < - step_into -i 1 - > <response xmlns =“urn:debugger_protocol_v1”xmlns:xdebug =“http://xdebug.org/db ...> </ response>
選擇啟動調試連接的時間。此設置可以有兩個不同的值:
- REQ
- 一旦腳本啟動,Xdebug將嘗試連接到調試客戶端。
- JIT
- 一旦出現錯誤情況,Xdebug將僅嘗試連接到調試客戶端。
Xdebug在IDE上等待確認傳入調試連接的時間量(以毫秒為單位)。在大多數情況下,默認值200 ms應該足夠了。如果您經常遇到調試請求丟失,可能是因為您有一個高延遲網絡,或遠離IDE的開發盒,或者防火牆速度慢,那么您可以增加此值。
請注意,增加此值可能意味着在Xdebug嘗試建立連接但您的IDE未偵聽時,您的請求似乎“掛起”。
當此設置設置為1時,Xdebug將在引發異常或錯誤時顯示堆棧跟蹤 - 即使實際捕獲到此異常或錯誤。
PHP 7中引入了錯誤“異常”。
跟蹤文件的格式。
值 | 描述 |
---|---|
0 | 顯示一個人類可讀的縮進跟蹤文件,其中包括: 時間索引,內存使用情況,內存增量(如果啟用了設置xdebug.show_mem_delta),級別,函數名稱, 函數參數(如果啟用了設置xdebug.collect_params), 文件名和行號。 |
1 | 寫一種具有兩種不同記錄的計算機可讀格式。輸入堆棧幀並留下堆棧幀有不同的記錄。下表列出了每種記錄類型中的字段。字段按制表符分隔。 |
2 | 寫一個用(簡單)HTML格式化的跟蹤。 |
計算機化格式的字段:
記錄類型 | 1 | 2 | 3 | 4 | 五 | 6 | 7 | 8 | 9 | 10 | 11 | 12 - ...... |
---|---|---|---|---|---|---|---|---|---|---|---|---|
條目 | 水平 | 功能# | 總是'0' | 時間指數 | 內存使用情況 | 功能名稱 | 用戶定義的(1)或內部函數(0) | 包含/要求文件的名稱 | 文檔名稱 | 電話號碼 | 沒有。參數 | 參數(與字段11中指定的數量一樣多) - 制表符分隔 |
出口 | 水平 | 功能# | 總是'1' | 時間指數 | 內存使用情況 | 空 | ||||||
返回 | 水平 | 功能# | 總是'R' | 空 | 回報價值 | 空 |
有關示例,請參閱功能跟蹤的介紹。
此設置確定用於將跟蹤轉儲到的文件的名稱。該設置指定格式說明符的格式,與sprintf()和strftime()非常相似。有幾種格式說明符可用於格式化文件名。始終會自動添加“.xt”擴展名。
可能的格式說明符是:
符 | 含義 | 示例格式 | 示例文件名 |
---|---|---|---|
%C | 當前工作目錄的crc32 | 跟蹤%C | trace.1258863198.xt |
%p | PID | 跟蹤。%P | trace.5174.xt |
%R | 隨機數 | 跟蹤。%R | trace.072db0.xt |
%S | 腳本名稱2 |
cachegrind.out%S | cachegrind.out._home_httpd_html_test_xdebug_test_php |
%T | 時間戳(秒) | 追查。%T | trace.1179434742.xt |
%u | 時間戳(微秒) | 跟蹤。%u | trace.1179434749_642382.xt |
%H | $ _ SERVER [ 'HTTP_HOST'] | 跟蹤。%H | trace.kossu.xt |
%R | $ _ SERVER [ 'REQUEST_URI'] | 跟蹤。%R | trace._test_xdebug_test_php_var = 1_var2 = 2.xt |
%U | $ _SERVER ['UNIQUE_ID'] 3 | 跟蹤。%U | trace.TRX4n38AAAEAAB9gBFkAAAAB.xt |
%S | session_id(如果設置,則來自$ _COOKIE) | 追查。%S | trace.c70c1ec2375af58f74b390bbdd2a679d.xt |
%% | 字面% | 跟蹤。%% | 跟蹤%%。XT |
2此版本僅適用於自Xdebug 2.6以來的跟蹤文件名。
3版本2.2中的新功能。這個是由Apache的mod_unique_id模塊設置的
當使用xdebug_var_dump(), xdebug.show_local_vars或通過函數跟蹤顯示變量時,控制數組子項的數量和對象的屬性。
要禁用任何限制,請使用-1作為值。
此設置對通過“ 遠程調試”功能發送給客戶端的子節點數沒有任何影響。
控制使用xdebug_var_dump(), xdebug.show_local_vars或通過函數跟蹤顯示變量時顯示的最大字符串長度。
要禁用任何限制,請使用-1作為值。
此設置對通過“ 遠程調試”功能發送給客戶端的子節點數沒有任何影響。
控制使用xdebug_var_dump(), xdebug.show_local_vars或通過函數跟蹤顯示變量時,有多少嵌套級別的數組元素和對象屬性。
您可以選擇的最大值是1023.您還可以使用-1作為值來選擇此最大數字。
此設置對通過“ 遠程調試”功能發送給客戶端的子節點數沒有任何影響。
配置舉例
php.ini中:
;pecl install xdebug-2.4.1 [xdebug] zend_extension=/usr/local/sinawap/apps/php-cms-5.4.45/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so xdebug.remote_enable = On xdebug.remote_handler = "dbgp" xdebug.remote_host = "10.222.22..."#修改下 xdebug.remote_port = 9000 xdebug.idekey = IDEA xdebug.profiler_output_dir = "/data1/profiler" xdebug.profiler_enable = 0 xdebug.profiler_enable_trigger = 1 xdebug.profiler_enable_trigger_value=SINA_SCP xdebug.trace_enable_trigger = 1 xdebug.trace_enable_trigger_value=SINA_SCP xdebug.trace_output_dir=/data1/profiler xdebug.show_mem_delta=1 xdebug.collect_params=4 xdebug.collect_return=1 xdebug.trace_format=1
配置完成之后重啟 php-fpm
安裝 xdebug 工具
安裝 chrome 擴展 Xdebug helper
啟用 Xdebug helper 的 profiler 工具
刷新頁面, 查看設定的文件夾
在上邊設定的文件夾中會生成 profiler 文件
使用工具來分析 profiler 文件
這里我使用 phpstorm 的分析工具來查看
Tools > Analyze Xdebug Profiler Snapshot
選擇生成的 輸出文件, 可以看到文件的解析信息, 這個對於分析自己寫的php代碼會有很大益處
使用IDEA/PHPStorm來debug
設置斷點
按紅線內設置
RUN->"Start listening for PHP Debug Connection"
選擇“Debug”
選擇之前 斷點的文件
開始 debug
使用Webgrind分析profile
安裝、使用: https://github.com/jokkedk/webgrind