摘要:目前有兩種流行的調(diào)試器,我在學(xué)習(xí)和研究過(guò)程中,發(fā)現(xiàn)網(wǎng)上的各種信息過(guò)于凌亂,感到痛苦,影響理解和使用。腳本在運(yùn)行時(shí),由插件向發(fā)起連接,將調(diào)試信息發(fā)送給,并通過(guò)協(xié)議進(jìn)行互動(dòng)。這種模式的缺陷是配死了目標(biāo),不能支持多用戶調(diào)試。
> 工欲善其事必先利其器,學(xué)習(xí)一門新語(yǔ)言,調(diào)試器的使用必不可少,本文分享一下PHP調(diào)試器的使用。
PHP目前有兩種流行的調(diào)試器,
Xdebug
Zend Debugger
我在學(xué)習(xí)和研究過(guò)程中,發(fā)現(xiàn)網(wǎng)上的各種信息過(guò)于凌亂,感到痛苦,影響理解和使用。今天我以Xdebug為例,先解釋其基本的工作原理,再說(shuō)明生產(chǎn)過(guò)程中如何使用,希望能帶給大家清晰易懂的知識(shí)。
XdebugXdebug是一個(gè)PHP擴(kuò)展,它采用DBGp協(xié)議,提供了對(duì)PHP進(jìn)行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,其它功能以后有機(jī)會(huì)再分享。
Debug原理原文參考:https://xdebug.org/docs/remote
簡(jiǎn)單來(lái)說(shuō),XDebug調(diào)試是一種C/S結(jié)構(gòu),Client是PHP-Xdebug插件,Server是我們的IDE(或者各種Editor插件),中間通過(guò)DBGp協(xié)議通信。PHP腳本在運(yùn)行時(shí),由Xdebug插件向IDE發(fā)起連接,將調(diào)試信息發(fā)送給IDE,并通過(guò)DBGp協(xié)議進(jìn)行互動(dòng)。
看下圖,就明白了:
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地址以及監(jiān)聽(tīng)的端口。這種模式的缺陷是配死了IDE目標(biāo),不能支持多用戶調(diào)試。所以Xdebug還提供了一種多用戶的調(diào)試模式,這種模式無(wú)需配置remote_host,而是配置xdebug.remote_connect_back=On,Xdebug會(huì)記下來(lái)訪地址,作為調(diào)試時(shí)的連接目標(biāo)。調(diào)試過(guò)程如下:
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
搞明白了原理,那我們就開(kāi)始實(shí)踐吧。
安裝Xdebug根據(jù)各自不同的工作站平臺(tái),參考官方安裝指導(dǎo).
安裝的時(shí)候注意一下輸出信息,記下安裝好的擴(kuò)展包位置,下一步配置PHP時(shí)會(huì)用到。
配置PHP-Xdebug打開(kāi)php.ini(不知道php.ini在哪里的,可以輸出phpinfo()看看),然后加上對(duì)Xdebug擴(kuò)展的配置:
[Xdebug] zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so" xdebug.remote_enable=On
xdebug.remote_enable=On,表示打開(kāi)遠(yuǎn)程調(diào)試開(kāi)關(guān),這是必須的。
然后,有兩種方法可以驗(yàn)證一下插件是否加載成功:
命令行執(zhí)行php -v,看看
![pic](http://imgur.com/3UbEnNo.png)
網(wǎng)頁(yè)輸出phpinfo()
![pic](http://imgur.com/r3I8FZF.png)
以上輸出若能看到Xdebug版本信息,就ok了。另外,在phpinfo中,可以看到xdebug的配置信息,搜搜看,這些配置都是可以在php.ini中進(jìn)行修改的,各自代表的意思大家可以查官網(wǎng),這里就不詳述了。
配置IDE以PHPStorm為例,PHPStorm實(shí)現(xiàn)了DBGp協(xié)議,我們需要配置它監(jiān)聽(tīng)的端口,這個(gè)端口號(hào)需要與xdebug.remote_port一致,才能確保調(diào)試時(shí)PHP-Xdebug能連上IDE。
以下是默認(rèn)配置,如果沒(méi)有沖突可以不用改。在幫其他同學(xué)trouble shooting時(shí),發(fā)現(xiàn)php-fpm和xdebug默認(rèn)都使用9000號(hào)端口,真是一個(gè)奇怪的配置啊,難道他們倆不應(yīng)該經(jīng)常被同時(shí)使用嗎?如果你發(fā)現(xiàn)自己的debug不能正常工作,不妨檢查一下這一點(diǎn),將他們調(diào)整為不同的端口。
開(kāi)始Debug之前說(shuō)過(guò),IDE是作為一個(gè)Server的角色監(jiān)聽(tīng)特定端口,等待Xdebug來(lái)連接,對(duì)于PHPStorm開(kāi)啟監(jiān)聽(tīng)非常簡(jiǎn)單,直接點(diǎn)擊右上角的“小電話”按鈕:
變成
然后在代碼里面打下斷點(diǎn)。
接下來(lái),開(kāi)始運(yùn)行并調(diào)試代碼。針對(duì)不同類型的應(yīng)用,方法也不一樣。但目的都是相同的,就是要告訴PHP-Xdebug,我要開(kāi)始調(diào)試了,給我把調(diào)試信息發(fā)過(guò)來(lái)!
Web App兩種方法:
在請(qǐng)求的URL地址后面加一個(gè)QueryString:XDEBUG_SESSION_START=session_name(當(dāng)然用POST參數(shù)也可以),這樣PHP-Xdebug就會(huì)知道該連接IDE調(diào)試了。
其實(shí)IDE提供了快捷的操作方式,不用你手動(dòng)寫URL參數(shù)。見(jiàn)Debugging PHP Web Applications with Run Debug Configurations,簡(jiǎn)單來(lái)說(shuō),就是你需要配置好Web Server,PHP Web Application,再點(diǎn)擊后上角的“小瓢蟲”按鈕,IDE就會(huì)自動(dòng)打開(kāi)瀏覽器,幫你輸好網(wǎng)址,并添加QueryString:XDEBUG_SESSION_START=session_name。
安裝瀏覽器插件,插件會(huì)在你請(qǐng)求一個(gè)PHP頁(yè)面時(shí),帶上一個(gè)XDEBUG_SESSION Cookie,這樣就不用在URL上帶參數(shù)了。
支持的插件:
Firefox: the-easiest-xdebug
Chrome: Xdebug helper
Safari: xdebug-toggler-for-safari
Opera: xdebug-launcher
試試以上兩種方法,斷點(diǎn)命中!開(kāi)始享受調(diào)試。
Console一般用在命令行程序或者單元測(cè)試的調(diào)試中。
我們需要通過(guò)設(shè)置環(huán)境變量XDEBUG_CONFIG來(lái)通知Xdebug進(jìn)行調(diào)試。當(dāng)然,我們可以向這個(gè)環(huán)境變量中添加更多的設(shè)置來(lái)配置Xdebug(這些配置都可以在php.ini中進(jìn)行設(shè)置)。
export XDEBUG_CONFIG="idekey=session_name" php myscript.php
斷點(diǎn)命中!
不想調(diào)試了,釋放掉這個(gè)環(huán)境變量。
unset XDEBUG_CONFIG
小技巧,如果你用Zsh,可以為上述兩段小代碼設(shè)置別名。
alias xdebug-on="export XDEBUG_CONFIG="idekey=PHPSTORM"" alias xdebug-off="unset XDEBUG_CONFIG"
PHPStorm也提供了快捷的操作,見(jiàn)Debugging PHP CLI scripts with PhpStorm
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25926.html
摘要:寫代碼總繞不過(guò)需要調(diào)試,除了外,我們還是需要借助進(jìn)行調(diào)試。這里的使用,是分別整合到和下。安裝還是基于神級(jí)武器。至于下一步如何更好的使用,就看各自的實(shí)際項(xiàng)目和開(kāi)發(fā)需要了。 寫代碼總繞不過(guò)需要調(diào)試,除了 UnitTest 外,我們還是需要借助 Xdebug 進(jìn)行調(diào)試。 所以今天來(lái)說(shuō)說(shuō)如何基于本地 Docker 環(huán)境下,使用 Xdebug。 這里的使用,是分別整合到 VS Code 和 PH...
摘要:當(dāng)我在官網(wǎng)看到了遠(yuǎn)程調(diào)試原理圖時(shí),我才知道應(yīng)該怎么配置。配置的參數(shù)也少了很多,也不需要在里對(duì)一個(gè)個(gè)請(qǐng)求地址進(jìn)行配置。其他可以配置可以共用。但是如果你使用的是本地的那他就會(huì)出現(xiàn)端口被占用的情況。 介紹 我之前配置直接按網(wǎng)上的文章進(jìn)行配置總是配置不成功,里面很多東西不了解。當(dāng)我在 xdebug 官網(wǎng)看到了 xdebug 遠(yuǎn)程調(diào)試原理圖時(shí),我才知道應(yīng)該怎么配置 xdebug。配置的參數(shù)也少了...
摘要:遠(yuǎn)程調(diào)試分為兩部分調(diào)試客戶端和服務(wù)端。主動(dòng)去連接的端口,連接成功后,調(diào)試開(kāi)始。當(dāng)然,單步調(diào)試的另一個(gè)好處是可以讓初學(xué)者快速掌握項(xiàng)目的架構(gòu)和執(zhí)行流程。 博客原文鏈接 在使用php調(diào)試代碼的時(shí)候,我通常都是使用簡(jiǎn)單暴力的echo之類的輸出調(diào)試。這種調(diào)試方法的效率與個(gè)人能力正相關(guān),你加一個(gè)echo多數(shù)是為了驗(yàn)證自己的一個(gè)推測(cè),那么你對(duì)代碼越熟悉,你推測(cè)的就會(huì)越準(zhǔn)確,bug解決的就越快,相反...
摘要:紅色方形,表示中斷當(dāng)前程序調(diào)試。第三個(gè)圖形示,強(qiáng)制進(jìn)入當(dāng)前函數(shù)內(nèi)部的程序??蚣苷f(shuō)明加載的文件列表可以觀察到所有全局變量當(dāng)前局部變量的數(shù)值可以新增變量,觀察變量隨著程序執(zhí)行的變化。參考文章使用與調(diào)試一 序言 Xdebug 作為 PHP 調(diào)試工具,提供了豐富的調(diào)試函數(shù)和配置,可以直觀的看到 PHP 源代碼的步進(jìn)和性能數(shù)據(jù),以便優(yōu)化PHP代碼。 使用 phpstorm + xdebug 來(lái)調(diào)...
摘要:是一個(gè)開(kāi)放源代碼的程序調(diào)試器即一個(gè)工具,可以用來(lái)跟蹤,調(diào)試和分析程序的運(yùn)行狀況。以下為安裝示例,安裝請(qǐng)參考集成開(kāi)發(fā)和斷點(diǎn)調(diào)試環(huán)境的配置。指令的配置路徑必須是絕對(duì)路徑。 Xdebug是一個(gè)開(kāi)放源代碼的PHP程序調(diào)試器(即一個(gè)Debug工具),可以用來(lái)跟蹤,調(diào)試和分析PHP程序的運(yùn)行狀況。以下為Windows+Phpstorm+Xampp+Xdebug安裝示例,MAC安裝請(qǐng)參考集成開(kāi)發(fā)和斷...
閱讀 2169·2021-11-15 11:36
閱讀 1516·2021-09-23 11:55
閱讀 2505·2021-09-22 15:16
閱讀 2038·2019-08-30 15:45
閱讀 1875·2019-08-29 11:10
閱讀 1039·2019-08-26 13:40
閱讀 929·2019-08-26 10:44
閱讀 3181·2019-08-23 14:55