主頁(yè) > 知識(shí)庫(kù) > PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查

PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查

熱門標(biāo)簽:衡水外呼系統(tǒng)平臺(tái) 新河科技智能外呼系統(tǒng)怎么樣 地圖標(biāo)注平臺(tái)怎么給錢注冊(cè) 常州地圖標(biāo)注服務(wù)商 福州人工外呼系統(tǒng)哪家強(qiáng) 安裝電銷外呼系統(tǒng) 釘釘打卡地圖標(biāo)注 注冊(cè)400電話申請(qǐng) 百度商鋪地圖標(biāo)注

最近一直在研究Xdebug的用法,主要是因?yàn)閄debug對(duì)PHP的開發(fā)效率提升確實(shí)很大,而卻能幫我們解決很多問題。所以這里就總結(jié)下我在配置PHPStorm+Xdebug環(huán)境中遇到的坑,給遇到進(jìn)不去斷點(diǎn)的朋友一些排查的建議。

運(yùn)行環(huán)境

  • PHP Version 7.1.22
  • Xdebug v2.6.0
  • PHP2016.2;
  • 操作系統(tǒng):MacOS 10.12.3

如果遇到無法進(jìn)入斷點(diǎn)的問題,可以按照以下的步驟進(jìn)行排查

確認(rèn)運(yùn)行Web程序的PHP安裝了Xdebug擴(kuò)展

PHP永久了,難免會(huì)在電腦上多裝幾個(gè)版本。這個(gè)時(shí)候就必須注意,你是否將Xdebug安裝到了你需要調(diào)試的PHP版本中,而且要注意,命令行運(yùn)行的php,不一定是Web程序運(yùn)行的PHP。例如你安裝了PHP的5.6和7.1兩個(gè)版本,命令行跑的是5.6,但fpm跑的是7.1。這時(shí)如果你給5.6安裝Xdebug,你運(yùn)行php -m | grep xdebug確實(shí)可以看到Xdebug擴(kuò)展,但是如果想調(diào)試7.1運(yùn)行的Web程序,當(dāng)然是不可能的。所以這里最關(guān)鍵一點(diǎn),就是:

在Web程序中輸出phpinfo();exit; ,來確認(rèn)運(yùn)行fpm的php中是否安裝了Xdubug擴(kuò)展。

確認(rèn)Xdebug擴(kuò)展的版本與PHP版本匹配

如果你安裝了Xdebug,但是版本與PHP不匹配,也是沒辦法正常工作的。如何正確的選擇PHP對(duì)應(yīng)的Xdebug版本。

確認(rèn)Xdebug配置了有效的參數(shù)

在PHPStorm中調(diào)試不同的PHP程序,需要配置不同的Xdebug參數(shù)。在Remote Debug模式下:

必須要設(shè)置的參數(shù)有:

  • remote_enable=1 開啟遠(yuǎn)程調(diào)試,不開啟這個(gè)參數(shù)的話,自然無法Remote Debug;
  • remote_host=127.0.0.1(本機(jī)情況) or remote_connect_back=1,由于這兩個(gè)配置項(xiàng)有緊密聯(lián)系,所以放在一起講。 首先,如果你指針對(duì)單個(gè)調(diào)試用戶,比如就你自己調(diào)試,你可以將remote_host設(shè)成你的Web程序運(yùn)行的ip(比如本機(jī),就設(shè)置為127.0.0.1),remote_connect_back的值不設(shè)置或者設(shè)置為0(你不設(shè)置默認(rèn)也是0)。這樣Xdebug每次調(diào)試的時(shí)候會(huì)固定連接remote_host指定的ip;但是如果你支持的是多人調(diào)試,明顯設(shè)置一個(gè)remote_host是沒辦法的。這個(gè)時(shí)候就可以用remote_connect_back=1來設(shè)置。當(dāng)remote_connect_back設(shè)置為1的時(shí)候,xdebug會(huì)根據(jù)請(qǐng)求來的ip自動(dòng)回連,進(jìn)行調(diào)試,從而支持多人調(diào)試。同時(shí),這個(gè)值設(shè)為1的話會(huì)使remote_host的設(shè)置無效;一般情況下,推薦使用remote_connect_back=1的配置
  • remote_port=9001 PHP進(jìn)程與DebugClient通信的端口號(hào),必須要設(shè)置與PHPStorm中的一致,否則無法正常通信;
  • idekey=PHPSTORM 可以理解為通信用到的口令,必須要設(shè)置與PHPStorm中的一致;

推薦設(shè)置的參數(shù):

remote_autostart=1
默認(rèn)狀態(tài)下,觸發(fā)調(diào)試需要在url中增加get參數(shù):XDEBUG_SESSION_START= {xdebug.idekey},如果想自動(dòng)啟動(dòng)調(diào)試,即不加這個(gè)參數(shù)也能自動(dòng)觸發(fā)調(diào)試,可以將這個(gè)值設(shè)為1,所以推薦將這個(gè)值設(shè)為1;

確認(rèn)PHPStorm監(jiān)聽的端口是Xdebug中配置的端口

一定要在此確認(rèn)Xdebug中配置的remote_port(最好使用打印出phpinfo來查看)和PHPStorm中配置的一致,否則無法進(jìn)入調(diào)試。

確認(rèn)PHPStorm中的debugclient順利啟動(dòng)

在PHPStorm的工具欄中啟動(dòng)了Remote Debug之后,需要檢查是否順利啟動(dòng)了DebugClient進(jìn)程。這個(gè)進(jìn)程就是PHPStorm啟動(dòng)來進(jìn)行調(diào)試的,所以只需要查看PHPStorm是否監(jiān)聽了我們?cè)O(shè)置的端口(remote_port)就可以了。例如我指定的端口是9001,那么在Mac上可以通過lsof -i tcp:9001命令查看:

確認(rèn)PHPStorm中的IDEKey和Xdebug中配置的一致

一定要確認(rèn)PHPStorm中配置的IDEKey和Xdebug中配置的idekey是一樣的,否則無法進(jìn)入調(diào)試。

代碼部署在遠(yuǎn)程,需要開啟目錄映射

如果你是調(diào)試遠(yuǎn)程的Web程序(即代碼不是部署在本機(jī)),必須要設(shè)置目錄映射,否則找不到代碼所在,是無法調(diào)試的。設(shè)置的方法如下圖:

確認(rèn)PHPStorm和Xdebug+PHP的版本匹配

使用Xdebug調(diào)試,是PHP進(jìn)程通過Xdebug擴(kuò)展和PHPStorm的debugclient通信的過程,所以必須這三方在版本上兼容才可以。有的時(shí)候碰到一些奇葩的問題,比如我就碰到過可以進(jìn)入斷點(diǎn),但是無法單步調(diào)試(點(diǎn)擊下一步調(diào)試進(jìn)程就卡死)的情況。這種情況很有可能是PHPStorm的版本和Xdebug+PHP的版本不兼容。比如我碰到的這個(gè)問題就是因?yàn)槲矣昧俗钚掳姹镜腦debug2.7,但是使用的PHPStorm卻是2017.2的版本,而我將xdebug降到2.6之后就可以正常調(diào)試了。所以,最好保證PHPStorm、Xdebug和PHP的版本協(xié)調(diào)一致。

總結(jié)

如果按照上面說的還是不行,那么就需要查看remote_log,來看下問題到底出在哪了。
這個(gè)時(shí)候需要在xdebug的配置中增加:xdebug.remote_log=/tmp/xdebug.log來打開remote_log。
配置完成之后,重新啟動(dòng)fpm,查看phpinfo,確認(rèn)remote_log生效之后(默認(rèn)是不啟動(dòng)remote_log的)之后,調(diào)試的時(shí)候就可以tail -f /tmp/xdebug.log來查看日志了。舉個(gè)例子,我故意將remote_port設(shè)置為一個(gè)不存在的9999端口,然后查看remote_log的報(bào)錯(cuò)信息:

從日志中看出,Xdebug嘗試去連接127.0.0.1的9999端口,但是失敗了。這樣,我們就能看出到底問題出在哪里,當(dāng)我們是在找不到配置的問題時(shí),可以借助日志,再結(jié)合google、百度,看看能否找到問題的所在。

以上就是PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查的詳細(xì)內(nèi)容,更多關(guān)于PHP斷點(diǎn)排查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解各種PHP函數(shù)漏洞
  • 如何使用SublimeText3配置 PHP IDE環(huán)境
  • php中foreach遍歷類對(duì)象的總結(jié)
  • php-fpm報(bào)502問題的解決辦法
  • PHP實(shí)現(xiàn)創(chuàng)建以太坊錢包轉(zhuǎn)賬等功能
  • 如何使用php生成zip壓縮包
  • 詳解PHP使用非對(duì)稱加密算法RSA
  • php常見的網(wǎng)絡(luò)攻擊及防御方法
  • PHP7下安裝并使用xhprof性能分析工具
  • PHP遠(yuǎn)程調(diào)用以及RPC框架
  • PHP代碼加密和擴(kuò)展解密實(shí)戰(zhàn)
  • 再談PHP未來之路

標(biāo)簽:柳州 鶴崗 白城 克拉瑪依 六安 鷹潭 唐山 遼陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查》,本文關(guān)鍵詞  PHPStorm+Xdebug,進(jìn)行,emote,Debug,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章