2019-07-15

花了一周多時(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)附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掖蛤,一起剝皮案震驚了整個(gè)濱河市杀捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚓庭,老刑警劉巖致讥,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異器赞,居然都是意外死亡垢袱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)港柜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)请契,“玉大人,你說(shuō)我怎么就攤上這事夏醉∷叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵畔柔,是天一觀(guān)的道長(zhǎng)氯夷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)靶擦,這世上最難降的妖魔是什么腮考? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任雇毫,我火速辦了婚禮,結(jié)果婚禮上踩蔚,老公的妹妹穿的比我還像新娘棚放。我一直安慰自己,他們只是感情好寂纪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布席吴。 她就那樣靜靜地躺著,像睡著了一般捞蛋。 火紅的嫁衣襯著肌膚如雪孝冒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天拟杉,我揣著相機(jī)與錄音庄涡,去河邊找鬼。 笑死搬设,一個(gè)胖子當(dāng)著我的面吹牛穴店,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拿穴,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泣洞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了默色?” 一聲冷哼從身側(cè)響起球凰,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腿宰,沒(méi)想到半個(gè)月后呕诉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吃度,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年甩挫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椿每。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伊者,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出间护,到底是詐尸還是另有隱情删壮,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布兑牡,位于F島的核電站央碟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亿虽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一菱涤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛勉,春花似錦粘秆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至此再,卻和暖如春昔搂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背输拇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工摘符, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人策吠。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓逛裤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猴抹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子带族,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容