佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > PHPStorm+Xdebug進行emote Debug時無法進入斷點問題排查

PHPStorm+Xdebug進行emote Debug時無法進入斷點問題排查

熱門標簽:阿里云 科大訊飛語音識別系統(tǒng) 團購網(wǎng)站 銀行業(yè)務 服務器配置 Mysql連接數(shù)設置 Linux服務器 電子圍欄

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

運行環(huán)境

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

如果遇到無法進入斷點的問題,可以按照以下的步驟進行排查

確認運行Web程序的PHP安裝了Xdebug擴展

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

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

確認Xdebug擴展的版本與PHP版本匹配

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

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

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

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

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

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

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

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

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

確認PHPStorm中的debugclient順利啟動

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

確認PHPStorm中的IDEKey和Xdebug中配置的一致

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

代碼部署在遠程,需要開啟目錄映射

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

確認PHPStorm和Xdebug+PHP的版本匹配

使用Xdebug調(diào)試,是PHP進程通過Xdebug擴展和PHPStorm的debugclient通信的過程,所以必須這三方在版本上兼容才可以。有的時候碰到一些奇葩的問題,比如我就碰到過可以進入斷點,但是無法單步調(diào)試(點擊下一步調(diào)試進程就卡死)的情況。這種情況很有可能是PHPStorm的版本和Xdebug+PHP的版本不兼容。比如我碰到的這個問題就是因為我用了最新版本的Xdebug2.7,但是使用的PHPStorm卻是2017.2的版本,而我將xdebug降到2.6之后就可以正常調(diào)試了。所以,最好保證PHPStorm、Xdebug和PHP的版本協(xié)調(diào)一致。

總結

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

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

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

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

標簽:廣元 衢州 蚌埠 衡水 江蘇 棗莊 大理 萍鄉(xiāng)

巨人網(wǎng)絡通訊聲明:本文標題《PHPStorm+Xdebug進行emote Debug時無法進入斷點問題排查》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    惠水县| 甘孜县| 安岳县| 龙里县| 金阳县| 上虞市| 南投县| 鹤峰县| 济宁市| 介休市| 平安县| 抚松县| 泸溪县| 遵化市| 高平市| 高唐县| 文昌市| 武宣县| 达州市| 渭源县| 博野县| 永济市| 杭锦后旗| 嘉兴市| 清水河县| 宁城县| 房产| 永平县| 大悟县| 宝清县| 柳林县| 驻马店市| 惠安县| 清苑县| 大邑县| 成安县| 江津市| 青海省| 阿拉尔市| 依兰县| 晋江市|