摘要:默認關閉如果該設置為,那么將禁用關閉操作符,以便不再隱藏通知警告和錯誤。將寫入垃圾收集統計信息輸出的目錄,確保將運行的用戶具有對該目錄的寫入權限。此設置確定用于將垃圾回收統計信息轉儲到的文件的名稱。
前言
Xdebug是PHP的擴展,用于協助調試和開發。
它包含一個用于IDE的調試器
它升級了PHP的var_dump()函數
它為通知,警告,錯誤和異常添加了堆棧跟蹤
它具有記錄每個函數調用和磁盤變量賦值的功能
它包含一個分析器
它提供了與PHPUnit一起使用的代碼覆蓋功能。
猿生必備的工具。
但不推薦在生產環境中使用xdebug,因為他太重了。
pecl install xdebug zend_extension="/usr/local/php/modules/xdebug.so"源碼包安裝
https://xdebug.org/download.php 尋找對應的包
wget xxx.gz ./configure make && make install zend_extension="/usr/local/php/modules/xdebug.so"Docker安裝
以下為php dockerfile內部分內容
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端口的鏈接。
當瀏覽器發送一個帶 XDEBUG_SESSION_START 的參數的請求到服務器時,服務器接受后將其轉到后端的php處理,如果php開啟了XDebug模塊,則會將debug信息轉發到客戶端IP的IDE的調試端口上。
當參數或者cookie信息中不帶 XDEBUG_SESSION_START ,則不會啟動調試。這就為后續在瀏覽器中添加開關提供了可能。
基本配置一般情況下,你都只需了解,無需修改。
名稱 | 類型 | 默認值 | 注解 |
---|---|---|---|
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的步驟,實際很簡單。
下載安裝debug
驗證是否通信正常
添加瀏覽器插件 (可省略)
配置運行文件
愉快的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就是遠程調試。首先你要保證
容器做了端口映射到本機80
容器內項目目錄做了磁盤掛載
將容器PHP XDEBUG 中
xdebug.remote_host=local_ip
即可,也不用擔心hosts文件的問題
本機IP = 127.0.0.1 = localhost
這樣配置完成后,就可以當容器不存在,與本機調試一樣。
致謝感謝你看到這里,希望本章內容可以幫到你,謝謝。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29402.html
新編html網頁設計從入門到精通共分為21章,全面系統地講解了html的發展歷史及4.0版的新特性、基本概念、設計原則、文件結構、文件屬性標記、用格式標記進行頁面排版、使用圖像裝飾頁面、超鏈接的使用、使用表格組織頁面、使用多媒體美化頁面、創建多框架頁面、動態網頁的制作、使用層疊樣式表(css)美化頁面、javascript語言、數組和字符串以及表達式與程序的流程控制等內容。 本書適合作為培訓學校的...
摘要:在中,選擇填寫你的項目的和等項目基本信息之后,在依賴中選擇之后。從入門到精通初識注解接口您的關注是我最大的動力 Spring Boot極大的簡化了java項目的開發,在之前如果想要開發一個java項目,需要安裝tomcat或者其他容器插件。但是Spring?Boot內部已經集成了tomcat,因此項目的啟動異常的方便。而且Spring?Boot的開發中有很多默認的配置,幫助我們省去了相...
摘要:本文章屬于爬蟲入門到精通系統教程第五講在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容萬能匹配文章的標題文字我們要獲取的如上所示,假如我們要獲取文章的標題這幾個文字,那么我們應該怎么做呢我 本文章屬于爬蟲入門到精通系統教程第五講 在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容 萬能匹配 h...
閱讀 2447·2021-11-15 11:38
閱讀 2831·2021-11-02 14:44
閱讀 3812·2021-09-26 10:13
閱讀 3054·2021-08-13 15:02
閱讀 776·2019-08-30 15:56
閱讀 1426·2019-08-30 15:53
閱讀 2357·2019-08-30 13:01
閱讀 3183·2019-08-29 12:57