做者:半船
來源:CSDN
原文:https://blog.csdn.net/yinhangbbbbb/article/details/79247331 php
花了一週多時間最詳細的整理了PHPSTORM+XDEBUG的調試教程,實現了php程序的遠程調試、單步調試、跟蹤等高級功能。工欲善其事必先利其器,但願對須要的小夥伴有所幫助。html
0 Xdebug調試的原理(選看)web
圖0-1 單機調試原理示意圖express
圖0-2 多機調試原理示意圖後端
對於PHP開發,初來咋到,開發環境的搭建和理解感受是最煩人的一件事了。不像JAVA,打開一個Eclipse就能夠開搞,Php的Debug都要幾個插件來配合工做。這些都是死的,好說。可是對於Xdebug的工做原理我一直是耿耿於懷,後來看了一篇神文Xdebug斷點調試的工做原理詳解。瀏覽器
Xdebug的工做原理能夠總結爲下面幾個步驟服務器
1)IDE(好比PhpStorm,下文所述的客戶端)中已經集成了一個遵循BGDp協議(一個專門用來調試的協議)的Xdebug插件。當要debug的時候,點擊一些IDE的某個按鈕,啓動這個插件。該插件會啓動一個9000的端口監聽遠程服務器發過來的debug信息。網絡
2)瀏覽器向Httpd服務器發送一個帶有XDEBUG_SESSION_START參數的請求,Httpd收到這個請求以後交給後端的PHP進行處理(下面就忽略Httpd,直接把Php叫作Server)。框架
3)Php看到這個請求是帶了XDEBUG_SESSION_START 參數,就告訴Xdebug,「嘿,我要debug喔,你準備一下」。這時,Xdebug這時會向來源ip客戶端的9000端口(即客戶端,也便是IDE)發送一個debug請求,而後客戶端的9000端口響應這個請求,那麼debug就開始了。phpstorm
4)Php知道Xdebug已經準備好了,那麼就開始開始一行一行的執行代碼,可是每執行一行都會讓Xdebug過濾一下。
5)Xdebug開始過濾代碼,Xdebug在過濾每一行代碼的時候,都會暫停代碼的執行,而後向客戶端的9000端口發送該行代碼的執行狀況,等待客戶端的決策(是一句代碼仍是下一個斷點待)。
6)相應,客戶端(IDE)收到Xdebug發送過來的執行狀況,就能夠把這些信息展現給開發者看了,包括一些變量的值等。同時向Xdebug發送下一步應該什麼。
1下載對應版本的xdebug
xdebug官網下載地址:https://xdebug.org/download.php
你須要仔細分析和選擇要下載的對應版本,不然沒法調試。因爲很是容易出錯,建議採用下面這種簡單方法:
xdebug網站提供一個自動分析你係統對應的xdebug版本的頁面,網址是 https://xdebug.org/wizard.php
圖1-1 xdebug網站提供的一個自動分析系統對應xdebug版本的頁面
在頁面中須要粘貼進去php版本信息,也就是phpinfo()函數的信息,以下圖:
圖1-2 phpinfo();函數返回的信息
ctrl+A全選這個頁面的信息,而後粘貼到第一個圖片的頁面中。
不知道這個頁面如何出現的同窗在你的php服務器程序目錄下 建立一個phpinfo.php文件,只需一行代碼
<?php phpinfo(); ?>
瀏覽器中輸入 http://127.0.0.1/phpinfo.php 就出現圖2 中的頁面了。
圖1-3 向頁面中拷貝phpinfo()獲取的信息
點擊 analyse my phpinfo() output 按鈕
圖1-4 找到你須要下載的xdebug版本
將下載的DLL文件拷貝到指定目錄,按照頁面上的提示便可
圖1-5 下載後拷貝到指定目錄,並在對應的php.ini中末尾處添加圖中第3小點的內容
到此爲止,xdebug的下載和啓用就完成了,從新運行 phpinfo.php 文件,在打開的頁面中出現圖1-6則說明安裝正確:
注意問題
1phpinfo.php須要啓動服務器後,經過瀏覽器訪問。
2 php.ini文件中增長的行,等號先後有空格,字符串值能夠有引號也能夠沒有引號。
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"
(這是我本機地址,這裏建議直接拷貝圖1-5中網頁給出的值)
2phpstorm中使用xdebug
2.1修改php配置文件
1 php服務器在本地的狀況。
在php.ini文件的末尾處追加以下代碼:
;xdebug庫文件
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"
;開啓遠程調試
xdebug.remote_enable = On
;客戶機ip
xdebug.remote_host="127.0.0.1"
;客戶機xdebug監聽端口和調試協議
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
;idekey 區分大小寫
xdebug.idekey="PHPSTORM"
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
;idekey 區分大小寫
xdebug.profiler_output_dir = "d:\tmp"
圖2-1圖中標紅的地方因不一樣主機而不一樣,請注意
2 PHP服務器不是本機
這種狀況我尚未試過,之後再補充,你們有作過的能夠給我留言。
2.2 phpstorm中的配置
(1)在文件->設置->語言與框架中->PHP->debug 設置端口,端口默認爲9000,因爲常常會被其餘程序佔用,這裏建議設置爲9001
圖2-2 修改調試端口
(2)在DBGp Proxy中配置你的idekey,idekey就是你在配置文件中最後一項,host是你的服務器ip或者是已經能夠解析的域名,port能夠自選,通常默認選80就行了
圖2-3修改調試協議DBGp的配置
(3)本身手動添加一個,Host填服務器ip,而後port是默認80端口,若是你修改過,你能夠更改爲你設置的web端口,debug選xdebug
圖2-4 建立一個本地調試服務器
(4)測試一下配置是否成功
圖2-4 建立一個調試服務器,用於與真正服務器同步
(5)測試成功
圖2-5 配置成功
第一個紅線是你的工程在服務器上的地址
第二條紅線是你的工程的網絡地址(最後的斜槓有木有均可以)
3調試使用
(1)新建一個運行調試配置
圖3-1建立一個調試配置
點擊「+」,建立一個 PHP Web Application的配置,右側輸入一個用於記憶的名稱,選擇服務器
(2)打開IDE的debug監聽
圖3-2 圖中爲關閉狀態,單擊後爲打開狀態
(3)開始調試
圖3-3 斷點生效
紅色圓中有個對號,是說明改斷點生效了
幾點注意
(1)Apache服務器默認的端口是80,按照上面設置就能夠了,Nginx默認是8080有URL的地方須要調整一下。URL的組成結構中包括端口號,只是默認值是80,不少時候省略了。
(2)遇到問題仔細分析一下,都是能夠解決的,若是實在有困難,能夠在評論區留言。
4調試的意義
調試對於PHP開發的真正意義,後續補充。
5參考資料
1 phpStorm+XDebug進行斷點調試的配置
http://www.chenxuanyi.cn/xampp-phpstorm-xdebug.html
2利用下面網頁中的Start debug按鈕在COOKIE中設置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調試原理
http://my.oschina.net/atanl/blog/371424