世界上最崩潰的事就是,在你快文章收尾的時候,瀏覽器因為意外關閉導致前功盡棄
社群的快取功能好像對我這次沒起作用,哎,再來一次吧,真是瞬間洩氣的感覺!!!:joy:
分割線
上一篇 成為高階 PHP 程式設計師的第一步——除錯(xdebug 原理篇),介紹了一下 xdebug 工作原理,明白了工作原理,對我們接下來的配置應該就是信手拈來,就算第一次沒成功,也會很快定位到問題。(好像任何事情好像都是這個道理 :joy: )
xdebug 配置
先簡單說一下在我們的 Homestead 中,xdebug 的簡單配置。(安裝就不在此展開了)
開啟配置檔案,(我的環境是7.1,下面都是以此版本配置,其他版本相同) /etc/php/7.1/mods-available/xdebug.ini
# 必填項
zend_extension=xdebug.so
xdebug.remote_enable = 1
xdebug.idekey = PHPSTORM (這個值是作為 XDEBUG_SESSION_START 的值,是通知 PHP 開啟除錯的標識)
# 可選項
xdebug.remote_connect_back = 1 (如原理篇介紹的,如果開啟,將會忽視 remote_host 的配置,以請求來源的 IP 作為 xdebug 響應的 IP)
xdebug.remote_log="/tmp/xdebug_php71.log" (記錄日誌)
#xdebug.remote_autostart = 1 (如果開啟,則無論什麼請求都會進行除錯響應)
# 預設的 remote_host 和 remote_port 如果不做更改可以省略
簡單的配置完成後,我們需要給 PHP 開啟一下這個模組。
TIPS : 我們知道,PHP 有兩種執行模式
FPM
和CLI
,想要開啟模組有一個實用的命令sudo phpenmod -s fpm [ -v 7.1 ] xdebug
。這樣就會開啟PHP-FPM
的 xdebug 模組,而不會影響CLI
。這個命令還有一些其他引數,比如-v
可以指定 PHP 的版本
開啟模組後,重啟一下服務:
sudo service php-fpm restart
至此,Homestead 的所有配置就全部完成啦,是不是很簡單!
PHPSTORM 配置
其實針對 xdebug 有兩種除錯模式,針對單個 PHP 檔案
和針對整個PHP專案
,這裡我們分開來說,也容易理解我們做的配置具體針對那部分生效
針對單個 PHP 檔案除錯配置
想要除錯 PHP 我們首先需要 開啟 xdebug 對 PHP 程式,這裡我們使用 Homestead 中的 PHP。
如圖所示,我們增加一個 CLI Interpreter
這裡我使用的方式是通過 SSH,注意紅框處,表示 PHP-CLI
模式也已經開啟了 xdebug 模組,如果沒有開啟我們需要開啟一下,還是上面說到的那個命令 sudo phpenmod -s cli xdebug
配置完成後,我們配置使用一下這個 CLI Interpreter
,注意紅框,必須配置目錄對映,至於原因下文說
到這裡,針對單檔案除錯的配置就算做完啦!我們除錯一個檔案試試!
針對整個專案的配置
下面說的配置和上面配置可以說沒有任何關係啦,大家可以忘掉剛才配置的事兒,繼續下一個。和除錯單個檔案不同的是,針對整個專案除錯,需要我們先配置一個 server
。同樣的,一定要配置目錄對映
儲存後,我們的配置可以說就完啦!(不過為了除錯的方便,我們增加一個其他的配置,這個稍後講。)
打斷一下,不知道大家發現沒有,不管針對
單個檔案
還是針對整個專案
的配置,都有一個For current project
的字樣。沒錯,這些配置只會對當前專案生效,如果再開啟一個新專案,這些配置是需要重新配置的!(不過已經配置的專案是會保留的)
我們請求專案測試之前,先打上幾個斷點,要不是看不到效果的:
如昨天原理說的,訪問之前我們還需要開啟一下 9000 埠
的監聽,開啟選單欄
開啟後,現在我們開啟瀏覽器,訪問專案當前打過斷點的路由。記得加我們的除錯標識
這時我們的 phpstorm 應該會蹦出一個除錯欄,和許多除錯資訊
如果沒有彈出除錯欄,但是瀏覽器一直在轉圈,沒有輸出結果,百分之百是因為除錯欄當中有其他除錯的
tab
,這就需要我們手動開啟除錯欄全部關掉!
到這裡,其實我們的配置已經完成了,已經可以進行遠端除錯了。但是剛才說的未完全的配置還有什麼?
還是我們的 選單欄 > Run > Edit Configurations
這裡我們增加一個 PHP Web Application 型別的專案,配置如圖。這個配置有什麼用呢?配置完這個後,當我們在 IDE 點選 選單欄 > Run > Debug
的時候,會彈出下面的框
我們選擇剛才配置的xdebug-myblog
,這時就會在瀏覽器開啟一個帶 debug 標示
的專案連結,不用我們手動輸入連結了
TIPS
- 每次需要除錯都需要手動寫那個引數太麻煩了怎麼辦?
已經有人幫你想好啦,chrome 可以安裝一個外掛xdebug helper
開啟這個外掛後,我們的連結不用加那個引數也可以除錯了!
他的工作原理是,設定一個cookie,如下圖所示。(XDEBUG_SESSION_START
支援 get
、post
和cookie
三種方式告訴 PHP 開啟除錯)
2 . 為什麼一定要設定目錄對映?
我的理解是,無論那種除錯模式,實際上執行的都是 Homestead 中的專案和檔案,所以開啟對映就相當於給 Homestead 中的專案打斷點,和 PHP 執行的檔案就統一了!這樣才能成功。這裡有一個回答,我覺得和我理解的是一個意思 Remote debugging path mapping
其實 xdebug 不僅能除錯,也可以作為 Profile 和 Trace 工具,當然,@MrJing 說的追蹤專案原始碼也是一個利器!最後祝大家能早日成為
"高階程式設計師"
,筆芯 :joy:
本作品採用《CC 協議》,轉載必須註明作者和本文連結