phpstorm+xdebug調試詳細教程


對於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就開始了。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM