摘要:目前有兩種流行的調試器,我在學習和研究過程中,發現網上的各種信息過于凌亂,感到痛苦,影響理解和使用。腳本在運行時,由插件向發起連接,將調試信息發送給,并通過協議進行互動。這種模式的缺陷是配死了目標,不能支持多用戶調試。
> 工欲善其事必先利其器,學習一門新語言,調試器的使用必不可少,本文分享一下PHP調試器的使用。
PHP目前有兩種流行的調試器,
Xdebug
Zend Debugger
我在學習和研究過程中,發現網上的各種信息過于凌亂,感到痛苦,影響理解和使用。今天我以Xdebug為例,先解釋其基本的工作原理,再說明生產過程中如何使用,希望能帶給大家清晰易懂的知識。
XdebugXdebug是一個PHP擴展,它采用DBGp協議,提供了對PHP進行Debugging和Profiling的能力。
Debug信息包含:
stack and function traces in error messages with:
full parameter display for user defined functions
function name, file name and line indications
support for member functions
memory allocation
protection for infinite recursions
此外,Xdebug還提供以下功能:
profiling information for PHP scripts
code coverage analysis
capabilities to debug your scripts interactively with a debugger front-end
今天只討論Debug,其它功能以后有機會再分享。
Debug原理原文參考:https://xdebug.org/docs/remote
簡單來說,XDebug調試是一種C/S結構,Client是PHP-Xdebug插件,Server是我們的IDE(或者各種Editor插件),中間通過DBGp協議通信。PHP腳本在運行時,由Xdebug插件向IDE發起連接,將調試信息發送給IDE,并通過DBGp協議進行互動。
看下圖,就明白了:
The IP of the server is 10.0.1.2 with HTTP on port 80
The IDE is on IP 10.0.1.42, so xdebug.remote_host is set to 10.0.1.42
The IDE listens on port 9000, so xdebug.remote_port is set to 9000
The HTTP request is started on the machine running the IDE
Xdebug connects to 10.0.1.42:9000
Debugging runs, HTTP Response provided
以上是單人模式,在php.ini中配置了IDE的IP地址以及監聽的端口。這種模式的缺陷是配死了IDE目標,不能支持多用戶調試。所以Xdebug還提供了一種多用戶的調試模式,這種模式無需配置remote_host,而是配置xdebug.remote_connect_back=On,Xdebug會記下來訪地址,作為調試時的連接目標。調試過程如下:
The IP of the server is 10.0.1.2 with HTTP on port 80
The IDE is on an unknown IP, so xdebug.remote_connect_back is set to 1
The IDE listens on port 9000, so xdebug.remote_port is set to 9000
The HTTP request is made, Xdebug detects the IP addres from the HTTP headers
Xdebug connects to the detected IP (10.0.1.42) on port 9000
Debugging runs, HTTP Response provided
搞明白了原理,那我們就開始實踐吧。
安裝Xdebug根據各自不同的工作站平臺,參考官方安裝指導.
安裝的時候注意一下輸出信息,記下安裝好的擴展包位置,下一步配置PHP時會用到。
配置PHP-Xdebug打開php.ini(不知道php.ini在哪里的,可以輸出phpinfo()看看),然后加上對Xdebug擴展的配置:
[Xdebug] zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so" xdebug.remote_enable=On
xdebug.remote_enable=On,表示打開遠程調試開關,這是必須的。
然后,有兩種方法可以驗證一下插件是否加載成功:
命令行執行php -v,看看
![pic](http://imgur.com/3UbEnNo.png)
網頁輸出phpinfo()
![pic](http://imgur.com/r3I8FZF.png)
以上輸出若能看到Xdebug版本信息,就ok了。另外,在phpinfo中,可以看到xdebug的配置信息,搜搜看,這些配置都是可以在php.ini中進行修改的,各自代表的意思大家可以查官網,這里就不詳述了。
配置IDE以PHPStorm為例,PHPStorm實現了DBGp協議,我們需要配置它監聽的端口,這個端口號需要與xdebug.remote_port一致,才能確保調試時PHP-Xdebug能連上IDE。
以下是默認配置,如果沒有沖突可以不用改。在幫其他同學trouble shooting時,發現php-fpm和xdebug默認都使用9000號端口,真是一個奇怪的配置啊,難道他們倆不應該經常被同時使用嗎?如果你發現自己的debug不能正常工作,不妨檢查一下這一點,將他們調整為不同的端口。
開始Debug之前說過,IDE是作為一個Server的角色監聽特定端口,等待Xdebug來連接,對于PHPStorm開啟監聽非常簡單,直接點擊右上角的“小電話”按鈕:
變成
然后在代碼里面打下斷點。
接下來,開始運行并調試代碼。針對不同類型的應用,方法也不一樣。但目的都是相同的,就是要告訴PHP-Xdebug,我要開始調試了,給我把調試信息發過來!
Web App兩種方法:
在請求的URL地址后面加一個QueryString:XDEBUG_SESSION_START=session_name(當然用POST參數也可以),這樣PHP-Xdebug就會知道該連接IDE調試了。
其實IDE提供了快捷的操作方式,不用你手動寫URL參數。見Debugging PHP Web Applications with Run Debug Configurations,簡單來說,就是你需要配置好Web Server,PHP Web Application,再點擊后上角的“小瓢蟲”按鈕,IDE就會自動打開瀏覽器,幫你輸好網址,并添加QueryString:XDEBUG_SESSION_START=session_name。
安裝瀏覽器插件,插件會在你請求一個PHP頁面時,帶上一個XDEBUG_SESSION Cookie,這樣就不用在URL上帶參數了。
支持的插件:
Firefox: the-easiest-xdebug
Chrome: Xdebug helper
Safari: xdebug-toggler-for-safari
Opera: xdebug-launcher
試試以上兩種方法,斷點命中!開始享受調試。
Console一般用在命令行程序或者單元測試的調試中。
我們需要通過設置環境變量XDEBUG_CONFIG來通知Xdebug進行調試。當然,我們可以向這個環境變量中添加更多的設置來配置Xdebug(這些配置都可以在php.ini中進行設置)。
export XDEBUG_CONFIG="idekey=session_name" php myscript.php
斷點命中!
不想調試了,釋放掉這個環境變量。
unset XDEBUG_CONFIG
小技巧,如果你用Zsh,可以為上述兩段小代碼設置別名。
alias xdebug-on="export XDEBUG_CONFIG="idekey=PHPSTORM"" alias xdebug-off="unset XDEBUG_CONFIG"
PHPStorm也提供了快捷的操作,見Debugging PHP CLI scripts with PhpStorm
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25926.html
摘要:寫代碼總繞不過需要調試,除了外,我們還是需要借助進行調試。這里的使用,是分別整合到和下。安裝還是基于神級武器。至于下一步如何更好的使用,就看各自的實際項目和開發需要了。 寫代碼總繞不過需要調試,除了 UnitTest 外,我們還是需要借助 Xdebug 進行調試。 所以今天來說說如何基于本地 Docker 環境下,使用 Xdebug。 這里的使用,是分別整合到 VS Code 和 PH...
摘要:當我在官網看到了遠程調試原理圖時,我才知道應該怎么配置。配置的參數也少了很多,也不需要在里對一個個請求地址進行配置。其他可以配置可以共用。但是如果你使用的是本地的那他就會出現端口被占用的情況。 介紹 我之前配置直接按網上的文章進行配置總是配置不成功,里面很多東西不了解。當我在 xdebug 官網看到了 xdebug 遠程調試原理圖時,我才知道應該怎么配置 xdebug。配置的參數也少了...
摘要:遠程調試分為兩部分調試客戶端和服務端。主動去連接的端口,連接成功后,調試開始。當然,單步調試的另一個好處是可以讓初學者快速掌握項目的架構和執行流程。 博客原文鏈接 在使用php調試代碼的時候,我通常都是使用簡單暴力的echo之類的輸出調試。這種調試方法的效率與個人能力正相關,你加一個echo多數是為了驗證自己的一個推測,那么你對代碼越熟悉,你推測的就會越準確,bug解決的就越快,相反...
摘要:紅色方形,表示中斷當前程序調試。第三個圖形示,強制進入當前函數內部的程序。框架說明加載的文件列表可以觀察到所有全局變量當前局部變量的數值可以新增變量,觀察變量隨著程序執行的變化。參考文章使用與調試一 序言 Xdebug 作為 PHP 調試工具,提供了豐富的調試函數和配置,可以直觀的看到 PHP 源代碼的步進和性能數據,以便優化PHP代碼。 使用 phpstorm + xdebug 來調...
摘要:是一個開放源代碼的程序調試器即一個工具,可以用來跟蹤,調試和分析程序的運行狀況。以下為安裝示例,安裝請參考集成開發和斷點調試環境的配置。指令的配置路徑必須是絕對路徑。 Xdebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),可以用來跟蹤,調試和分析PHP程序的運行狀況。以下為Windows+Phpstorm+Xampp+Xdebug安裝示例,MAC安裝請參考集成開發和斷...
閱讀 2153·2021-11-15 11:36
閱讀 1461·2021-09-23 11:55
閱讀 2486·2021-09-22 15:16
閱讀 2028·2019-08-30 15:45
閱讀 1862·2019-08-29 11:10
閱讀 1025·2019-08-26 13:40
閱讀 915·2019-08-26 10:44
閱讀 3168·2019-08-23 14:55