Xdebug是PHP的擴展,用於協助調試和開發。php
var_dump()
函數猿生必備的工具。
但不推薦在生產環境中使用xdebug,由於他過重了。git
pecl install xdebug zend_extension="/usr/local/php/modules/xdebug.so"
https://xdebug.org/download.php 尋找對應的包github
wget xxx.gz ./configure make && make install zend_extension="/usr/local/php/modules/xdebug.so"
如下爲php dockerfile內部份內容web
RUN pecl install xdebug RUN echo 'zend_extension=xdebug.so' >> /usr/local/etc/php/conf.d/xdebug.ini
IDE(如PHPStorm)已經集成了一個遵循BGDP的XDebug插件,當開啓它的時候, 會在本地開一個XDebug調試服務,監聽在調試器中所設置的端口上,默認是9000,這個服務就會監聽全部到9000端口的連接。chrome
當瀏覽器發送一個帶 XDEBUG_SESSION_START 的參數的請求到服務器時,服務器接受後將其轉到後端的php處理,若是php開啓了XDebug模塊,則會將debug信息轉發到客戶端IP的IDE的調試端口上。docker
當參數或者cookie信息中不帶 XDEBUG_SESSION_START ,則不會啓動調試。這就爲後續在瀏覽器中添加開關提供了可能。express
通常狀況下,你都只需瞭解,無需修改。後端
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.default_enable | boolean | 1 | 堆棧跟蹤,默認開啓,是xdebug基礎功能之一 |
xdebug.force_display_errors | integer | 0 | 默認關閉,若是這個設置設置爲1,那麼不管PHP的display_errors設置爲何,都將始終顯示錯誤。 |
xdebug.force_error_reporting | integer | 0 | 默認關閉,容許強制顯示某些錯誤 |
xdebug.halt_level | integer | 0 | 默認關閉,設置接收某些指定錯誤 |
xdebug.max_nesting_level | integer | 256 | 控制無限遞歸(死循環)的保護機制,默認是256 |
xdebug.max_stack_frames | integer | -1 | 控制有多少堆棧幀顯示在堆棧跟蹤中,在PHP錯誤堆棧跟蹤的命令行中,以及在瀏覽器中顯示HTML跟蹤。 |
xdebug.scream | boolean | 0 | 默認關閉,若是該設置爲1,那麼Xdebug將禁用@(關閉)操做符,以便再也不隱藏通知、警告和錯誤。 |
具體內容請移步官網 https://xdebug.org/docs/basic數組
Xdebug將替換PHP的var_dump()函數來顯示變量。Xdebug版本包含了不一樣類型的不一樣顏色,並對數組元素/對象屬性的數量、最大深度和字符串長度進行了限制。還有一些其餘函數也處理變量顯示。瀏覽器
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.cli_color | integer | 0 | cli模式下輸入結果是否設置顏色 |
xdebug.overload_var_dump | boolean | 2 | 是否容許xdebug重載var_dump函數 |
xdebug.var_display_max_children | integer | 128 | var_dump 對數組對象子級的顯示層數限制 |
xdebug.var_display_max_data | integer | 512 | var_dump 對結果長度的限制 |
xdebug.var_display_max_depth | integer | 3 | var_dump 對默認顯示嵌套的層數的限制 |
具體內容請移步官網 https://xdebug.org/docs/display
當Xdebug被激活時,當PHP決定顯示一個通知、警告、錯誤等時,它將顯示一個堆棧跟蹤。堆棧跟蹤顯示的信息以及它們的顯示方式能夠配置爲適合您的須要。
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.cli_color | integer | 0 | cli模式下輸入結果是否設置顏色 |
xdebug.collect_includes | boolean | 1 | 控制Xdebug是否應該將include()、include_once()、require()或require_once()中的文件名寫入跟蹤文件 |
xdebug.collect_params | integer | 0 | 該設置默認爲0,控制當函數跟蹤或堆棧跟蹤記錄函數調用時,Xdebug是否應該收集傳遞給函數的參數 |
xdebug.collect_vars | boolean | 0 | 這個設置告訴Xdebug在特定範圍內使用哪些變量。因爲Xdebug必須逆向工程PHP的操做碼數組,這種分析可能至關緩慢。對於使用xdebug.collect_params,此設置不會記錄不一樣變量的值。只有當您但願使用xdebug_get_declared_vars()時,才須要啓用此設置。 |
xdebug.dump.* | string | empty | * 能夠是任何COOKIE、文件、GET、POST、REQUEST、SERVER、SESSION。這七個設置控制在發生錯誤時顯示來自超全局變量的哪些數據。 |
xdebug.dump_globals | boolean | 1 | 當該設置設置爲true時,Xdebug將添加經過Xdebug.dump配置的超級全局變量的值*到屏幕上的堆棧跟蹤和錯誤日誌。 |
xdebug.dump_once | boolean | 1 | 控制是否應該在全部錯誤狀況(設置爲0)上轉儲超全局變量的值,或只在第一個錯誤狀況下轉儲超全局變量的值(設置爲1) |
xdebug.dump_undefined | boolean | 0 | 若是您想從超全局變量中轉儲未定義的值,您應該將該設置設置爲1,不然將其設置爲0。 |
xdebug.file_link_format | string | 文件連接格式 |
具體內容請移步官網 https://xdebug.org/docs/stack...
Xdebug容許記錄全部函數調用,包括參數和以不一樣格式返回的值。
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.auto_trace | boolean | 0 | 當將此設置設置爲ture時,將在腳本運行以前啓用函數調用的跟蹤 |
xdebug.collect_assignments | boolean | 0 | 該設置默認爲0,控制Xdebug是否應該向函數跟蹤添加變量賦值。 |
xdebug.collect_includes | boolean | 1 | 該設置默認爲1,控制Xdebug是否應該將include()、include_once()、require()或require_once()中的文件名寫入跟蹤文件。 |
xdebug.collect_params | integer | 0 | 該設置默認爲0,控制當函數跟蹤或堆棧跟蹤記錄函數調用時,Xdebug是否應該收集傳遞給函數的參數。 |
xdebug.collect_return | boolean | 0 | 該設置默認爲0,控制Xdebug是否應該將函數調用的返回值寫入跟蹤文件。 |
xdebug.show_mem_delta | integer | 0 | Xdebug生成的跟蹤文件將顯示函數調用之間內存使用的差別 |
xdebug.trace_format | integer | 0 | 跟蹤文件的格式 |
xdebug.trace_options | integer | 0 | 當設置爲「1」時,跟蹤文件將被附加到後面的請求中,而不是被覆蓋。 |
xdebug.trace_output_dir | string | /tmp | 寫入跟蹤文件的目錄,確保PHP運行的用戶具備該目錄的寫權限。 |
具體內容請移步官網 https://xdebug.org/docs/execu...
Xdebug的內置垃圾收集統計信息分析器容許您查明PHP內部垃圾收集器什麼時候觸發、它可以清理多少變量、它花費了多長時間以及實際釋放了多少內存。
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.gc_stats_enable | bool | false | 若是啓用此設置,則垃圾收集運行的統計信息將自動收集到使用xdebug.gc_stats_output_dir設置的給定目錄中, 並使用由xdebug.gc_stats_output_name配置的自動生成的名稱。 |
xdebug.gc_stats_output_dir | string | /tmp | 將寫入垃圾收集統計信息輸出的目錄,確保將運行PHP的用戶具備對該目錄的寫入權限。沒法使用ini_set() 在腳本中設置此設置。 |
xdebug.gc_stats_output_name | string | gcstats.%p | 此設置肯定用於將垃圾回收統計信息轉儲到的文件的名稱。該設置使用格式說明符指定格式,與sprintf() 和strftime() 很是類似。有幾種格式說明符可用於格式化文件名。 |
具體內容請移步官網 https://xdebug.org/docs/garba...
Xdebug爲與運行PHP腳本交互的調試器客戶機提供了一個接口。
名稱 | 類型 | 默認值 | 註解 |
---|---|---|---|
xdebug.extended_info | integer | 1 | 控制Xdebug是否應該爲PHP解析器強制執行'extended_info'模式; 這容許Xdebug使用遠程調試器執行文件/行斷點。在跟蹤或分析腳本時,您一般但願關閉此選項,由於PHP生成的oparray將增長大約三分之一的大小,從而減慢腳本速度。沒法使用ini_set()在腳本中設置此設置,但只能在php.ini中設置。 |
xdebug.idekey | string | complex | 控制哪些IDE Key Xdebug應傳遞給DBGp調試器處理程序。則與客戶端通訊的key |
xdebug.remote_addr_header | string | "" | 該值將用做$SERVER超全局數組中的鍵,以肯定用於查找用於「鏈接回」的IP地址或主機名的標頭 |
xdebug.remote_autostart | boolean | 0 | 您須要使用特定的HTTP GET / POST變量來啓動遠程調試 |
xdebug.remote_connect_back | boolean | 0 | 若是你不設置ip地址,就只能靠xdebug本身找了,Xdebug將嘗試鏈接到發出HTTP請求的客戶端。它檢查$_SERVER['HTTP_X_FORWARDED_FOR']和$_SERVER['REMOTE_ADDR']變量以找出要使用的IP地址 |
xdebug.remote_cookie_expire_time | integer | 3600 | 設置cookie的生命週期 |
xdebug.remote_enable | boolean | 0 | 是否開啓遠程調試 |
xdebug.remote_handler | string | dbgp | 調試的通訊協議 |
xdebug.remote_host | string | localhost | 調試的網絡地址,開啓了remote_connect_back後,當前配置就無效了 |
xdebug.remote_log | string | 調試的日誌 | |
xdebug.remote_port | integer | 9000 | 調試的端口 |
xdebug.remote_timeout | integer | 200 | 調試的通訊連接的等待時間 |
具體內容請移步官網 https://xdebug.org/docs/remote
所有配置請移步官網 https://xdebug.org/docs/all_s...
所有函數請移步官網 https://xdebug.org/docs/all_f...
網絡上的配置DEBUG文章太雜太亂,在PHPSTROM跳來跳去的,實在讓人心煩意亂,本章從新整理描述。
其實在PHPSTROM中已經出了很詳細的教程,是吧?只不過大部分人都會直接百度/Google,查詢是個好習慣,但要視狀況而定。
Languages & Frameworks > PHP > Debug
下載XDEBUG擴展,本章開頭已經講過了,這裏再也不闡述。
在安裝完成後,PHPSTROM提供了驗證腳本。腳本地址爲 https://gist.github.com/litzi...
正常狀況下檢測成功的樣子是
看到這個你就能夠放心的去debug了。
裝個瀏覽器插件,用戶請求監聽。這個東西惟一的做用就是方便了debug,正常若是不安裝的話你須要經過GET傳參 XDEBUG_SESSION_START=ID_KEY
才能夠,安裝插件後就不須要了。
你能夠自行選擇是否開啓debug,如下爲瀏覽器插件列表
瀏覽器 | 下載 |
---|---|
Chrome | Xdebug Helper |
Firefox | The easiest Xdebug or Xdebug Helper |
Safari | Xdebug Toggler |
Opera | Xdebug launcher |
Internet Explorer | PhpStorm bookmarklets generator |
開啓監聽便可。
你能夠直接點擊圖片上的監聽按鈕。
到如今爲止,就配置好了IDE。
建立DEBUG配置文件,根據每一個項目都要配置。這步你跑不了。
你看,PHPSTORM很是人性化,在每一步都會給你出個簡單的教程來描述如何配置DEBUG。
添加一個Server和IDE key(xdebug.idekey) 就能夠進行調試了。
總結如下IDE配置DEBUG的步驟,實際很簡單。
這裏還要說明下,若是你是不須要訪問本機調試一些類或者代碼塊,你只須要在本機上安裝好XDEBUG,上述配置所有省略,直接點小蟲子圖標便可調試。DEBUG端口默認是9000,若是配置文件內修改了,固然在IDE內也須要修改下。
介紹下實際DEBUG過程當中PHPSTORM面板的按鈕都是作什麼用的。當你啓動監聽後,你將會看到以下圖
根據上圖圖標位置,以x,y座標的方式描述每一個圖標的功能。
圖標 | 位置 (x,y) | 功能 |
---|---|---|
![]() |
0,0 | 從新執行DEBUG (Rerun test.php) |
![]() |
0,1 | 跳轉到原調試文件 (Show execution point) |
![]() |
0,2 | 跳到下一行 (Step over) |
![]() |
0,3 | 執行下一步 (Step info) |
![]() |
0,4 | 跳入庫、構造函數等方法或類中 (Force Step Info) |
![]() |
0,5 | 執行函數體或類方法,若是在最外層則結束本次調試 (Step out) |
![]() |
0,6 | 跳到當前節點的下個斷點 (Run to Cursor) |
![]() |
0,7 | 執行修改變量或返回的結果用於二次調試(Evaluate arbitrary expression) |
![]() |
0,8 | 顯示值的地址 (Show Values Addresses) |
![]() |
0,9 | 是否顯示空的值 , 默認是不顯示 |
![]() |
0,10 | 跳到下個斷點 (Add method to skip list) |
![]() |
1,0 | 從新執行DEBUG (Resume Program) |
![]() |
2,0 | 中止DEBUG(Step process) |
![]() |
3,0 | 查看和管理全部的斷點 ( View and manage all breakpoints) |
![]() |
4,0 | 忽略全部斷點 (Mute breakpoints) |
部分人在本機裝了Docker,容器中運行這PHP,這個時候該如何進行DEBUG呢?若是認真看本篇文章,你會發現十分的簡單。自己XDEBUG就是遠程調試。首先你要保證
將容器PHP XDEBUG 中
xdebug.remote_host=local_ip
便可,也不用擔憂hosts文件的問題
本機IP = 127.0.0.1 = localhost
這樣配置完成後,就能夠當容器不存在,與本機調試同樣。
感謝你看到這裏,但願本章內容能夠幫到你,謝謝。