花了一周多時(shí)間最詳細(xì)的整理了PHPSTORM+XDEBUG的調(diào)試教程衍菱,實(shí)現(xiàn)了php程序的遠(yuǎn)程調(diào)試枢舶、單步調(diào)試懦胞、跟蹤等高級(jí)功能。工欲善其事必先利其器凉泄,希望對(duì)需要的小伙伴有所幫助躏尉。
0 Xdebug調(diào)試的原理(選看)
圖0-1 單機(jī)調(diào)試原理示意圖
圖0-2 多機(jī)調(diào)試原理示意圖
對(duì)于PHP開(kāi)發(fā),初來(lái)咋到后众,開(kāi)發(fā)環(huán)境的搭建和理解感覺(jué)是最煩人的一件事了胀糜。不像JAVA颅拦,打開(kāi)一個(gè)Eclipse就可以開(kāi)搞,Php的Debug都要幾個(gè)插件來(lái)配合工作教藻。這些都是死的距帅,好說(shuō)。但是對(duì)于Xdebug的工作原理我一直是耿耿于懷括堤,后來(lái)看了一篇神文Xdebug斷點(diǎn)調(diào)試的工作原理詳解碌秸。
Xdebug的工作原理可以總結(jié)為下面幾個(gè)步驟
1)IDE(比如PhpStorm,下文所述的客戶(hù)端)中已經(jīng)集成了一個(gè)遵循BGDp協(xié)議(一個(gè)專(zhuān)門(mén)用來(lái)調(diào)試的協(xié)議)的Xdebug插件悄窃。當(dāng)要debug的時(shí)候哮肚,點(diǎn)擊一些IDE的某個(gè)按鈕,啟動(dòng)這個(gè)插件广匙。該插件會(huì)啟動(dòng)一個(gè)9000的端口監(jiān)聽(tīng)遠(yuǎn)程服務(wù)器發(fā)過(guò)來(lái)的debug信息。
2)瀏覽器向Httpd服務(wù)器發(fā)送一個(gè)帶有XDEBUG_SESSION_START參數(shù)的請(qǐng)求恼策,Httpd收到這個(gè)請(qǐng)求之后交給后端的PHP進(jìn)行處理(下面就忽略Httpd鸦致,直接把Php叫做Server)。
3)Php看到這個(gè)請(qǐng)求是帶了XDEBUG_SESSION_START?參數(shù)涣楷,就告訴Xdebug分唾,“嘿,我要debug喔狮斗,你準(zhǔn)備一下”绽乔。這時(shí),Xdebug這時(shí)會(huì)向來(lái)源ip客戶(hù)端的9000端口(即客戶(hù)端碳褒,也即是IDE)發(fā)送一個(gè)debug請(qǐng)求折砸,然后客戶(hù)端的9000端口響應(yīng)這個(gè)請(qǐng)求,那么debug就開(kāi)始了沙峻。
4)Php知道Xdebug已經(jīng)準(zhǔn)備好了睦授,那么就開(kāi)始開(kāi)始一行一行的執(zhí)行代碼,但是每執(zhí)行一行都會(huì)讓Xdebug過(guò)濾一下摔寨。
5)Xdebug開(kāi)始過(guò)濾代碼去枷,Xdebug在過(guò)濾每一行代碼的時(shí)候,都會(huì)暫停代碼的執(zhí)行是复,然后向客戶(hù)端的9000端口發(fā)送該行代碼的執(zhí)行情況删顶,等待客戶(hù)端的決策(是一句代碼還是下一個(gè)斷點(diǎn)待)。
6)相應(yīng)淑廊,客戶(hù)端(IDE)收到Xdebug發(fā)送過(guò)來(lái)的執(zhí)行情況逗余,就可以把這些信息展示給開(kāi)發(fā)者看了,包括一些變量的值等季惩。同時(shí)向Xdebug發(fā)送下一步應(yīng)該什么猎荠。
1下載對(duì)應(yīng)版本的xdebug
xdebug官網(wǎng)下載地址:https://xdebug.org/download.php?
你需要仔細(xì)分析和選擇要下載的對(duì)應(yīng)版本坚弱,否則無(wú)法調(diào)試。由于非常容易出錯(cuò)关摇,建議采用下面這種簡(jiǎn)單方法:
xdebug網(wǎng)站提供一個(gè)自動(dòng)分析你系統(tǒng)對(duì)應(yīng)的xdebug版本的頁(yè)面荒叶,網(wǎng)址是 ?https://xdebug.org/wizard.php
圖1-1 xdebug網(wǎng)站提供的一個(gè)自動(dòng)分析系統(tǒng)對(duì)應(yīng)xdebug版本的頁(yè)面
在頁(yè)面中需要粘貼進(jìn)去php版本信息,也就是phpinfo()函數(shù)的信息输虱,如下圖:
圖1-2 phpinfo();函數(shù)返回的信息
ctrl+A全選這個(gè)頁(yè)面的信息些楣,然后粘貼到第一個(gè)圖片的頁(yè)面中。
不知道這個(gè)頁(yè)面如何出現(xiàn)的同學(xué)在你的php服務(wù)器程序目錄下 創(chuàng)建一個(gè)phpinfo.php文件宪睹,只需一行代碼
<?php ?phpinfo(); ?>
瀏覽器中輸入 http://127.0.0.1/phpinfo.php 就出現(xiàn)圖2 中的頁(yè)面了愁茁。
圖1-3 向頁(yè)面中拷貝phpinfo()獲取的信息
點(diǎn)擊 analyse my phpinfo() output 按鈕
圖1-4 找到你需要下載的xdebug版本
將下載的DLL文件拷貝到指定目錄,按照頁(yè)面上的提示即可
圖1-5 下載后拷貝到指定目錄亭病,并在對(duì)應(yīng)的php.ini中末尾處添加圖中第3小點(diǎn)的內(nèi)容
到此為止鹅很,xdebug的下載和啟用就完成了,重新運(yùn)行?phpinfo.php 文件罪帖,在打開(kāi)的頁(yè)面中出現(xiàn)圖1-6則說(shuō)明安裝正確:
注意問(wèn)題
1phpinfo.php需要啟動(dòng)服務(wù)器后促煮,通過(guò)瀏覽器訪(fǎng)問(wèn)。
2 php.ini文件中增加的行整袁,等號(hào)前后有空格菠齿,字符串值可以有引號(hào)也可以沒(méi)有引號(hào)。
zend_extension = C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll
zend_extension = "C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll"
(這是我本機(jī)地址坐昙,這里建議直接拷貝圖1-5中網(wǎng)頁(yè)給出的值)
2phpstorm中使用xdebug
2.1修改php配置文件
1 php服務(wù)器在本地的情況绳匀。
在php.ini文件的末尾處追加如下代碼:
;xdebug庫(kù)文件
zend_extension = "C:\laragon\bin\php\php-7.1.7-Win32-VC14-x64\ext\php_xdebug-2.6.0-7.1-vc14-x86_64.dll"
;開(kāi)啟遠(yuǎn)程調(diào)試
xdebug.remote_enable = On
;客戶(hù)機(jī)ip
xdebug.remote_host="127.0.0.1"
;客戶(hù)機(jī)xdebug監(jiān)聽(tīng)端口和調(diào)試協(xié)議
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
;idekey 區(qū)分大小寫(xiě)
xdebug.idekey="PHPSTORM"
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
;idekey 區(qū)分大小寫(xiě)
xdebug.profiler_output_dir = "d:\tmp"
圖2-1圖中標(biāo)紅的地方因不同主機(jī)而不同,請(qǐng)注意
2 PHP服務(wù)器不是本機(jī)
這種情況我還沒(méi)有試過(guò)炸客,以后再補(bǔ)充疾棵,大家有做過(guò)的可以給我留言。
2.2 phpstorm中的配置
(1)在文件->設(shè)置->語(yǔ)言與框架中->PHP->debug 設(shè)置端口痹仙,端口默認(rèn)為9000陋桂,由于經(jīng)常會(huì)被其他程序占用,這里建議設(shè)置為9001
圖2-2 修改調(diào)試端口
(2)在DBGp Proxy中配置你的idekey蝶溶,idekey就是你在配置文件中最后一項(xiàng)嗜历,host是你的服務(wù)器ip或者是已經(jīng)可以解析的域名,port可以自選抖所,一般默認(rèn)選80就好了
圖2-3修改調(diào)試協(xié)議DBGp的配置
(3)自己手動(dòng)添加一個(gè)梨州,Host填服務(wù)器ip,然后port是默認(rèn)80端口田轧,如果你修改過(guò)暴匠,你可以更改成你設(shè)置的web端口,debug選xdebug
圖2-4 創(chuàng)建一個(gè)本地調(diào)試服務(wù)器
(4)測(cè)試一下配置是否成功
圖2-4 創(chuàng)建一個(gè)調(diào)試服務(wù)器傻粘,用于與真正服務(wù)器同步
(5)測(cè)試成功
圖2-5 配置成功
第一個(gè)紅線(xiàn)是你的工程在服務(wù)器上的地址
第二條紅線(xiàn)是你的工程的網(wǎng)絡(luò)地址(最后的斜杠有木有都可以)
3調(diào)試使用
(1)新建一個(gè)運(yùn)行調(diào)試配置
圖3-1創(chuàng)建一個(gè)調(diào)試配置
點(diǎn)擊“+”每窖,創(chuàng)建一個(gè) PHP Web Application的配置帮掉,右側(cè)輸入一個(gè)用于記憶的名稱(chēng),選擇服務(wù)器
(2)打開(kāi)IDE的debug監(jiān)聽(tīng)
圖3-2 圖中為關(guān)閉狀態(tài)窒典,單擊后為打開(kāi)狀態(tài)
(3)開(kāi)始調(diào)試
圖3-3 斷點(diǎn)生效
?紅色圓中有個(gè)對(duì)號(hào)蟆炊,是說(shuō)明改斷點(diǎn)生效了
幾點(diǎn)注意
(1)Apache服務(wù)器默認(rèn)的端口是80,按照上面設(shè)置就可以了瀑志,Nginx默認(rèn)是8080有URL的地方需要調(diào)整一下涩搓。URL的組成結(jié)構(gòu)中包括端口號(hào),只是默認(rèn)值是80劈猪,很多時(shí)候省略了昧甘。
(2)遇到問(wèn)題仔細(xì)分析一下,都是可以解決的战得,如果實(shí)在有困難充边,可以在評(píng)論區(qū)留言。
4調(diào)試的意義
調(diào)試對(duì)于PHP開(kāi)發(fā)的真正意義常侦,后續(xù)補(bǔ)充浇冰。
5參考資料
1 phpStorm+XDebug進(jìn)行斷點(diǎn)調(diào)試的配置
http://www.chenxuanyi.cn/xampp-phpstorm-xdebug.html
2利用下面網(wǎng)頁(yè)中的Start debug按鈕在COOKIE中設(shè)置Xdebug所需的變量。
http://www.jetbrains.com/phpstorm/marklets/
3 Cannot accept external Xdebug connection:Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])
http://devnet.jetbrains.com/message/5463083?tstart=0
4Xdebug調(diào)試原理
http://my.oschina.net/atanl/blog/371424
---------------------
作者:半船
來(lái)源:CSDN
原文:https://blog.csdn.net/yinhangbbbbb/article/details/79247331
版權(quán)聲明:本文為博主原創(chuàng)文章刮吧,轉(zhuǎn)載請(qǐng)附上博文鏈接!