成為高階 PHP 程式設計師的第一步——除錯(xdebug 配置篇)

Newiep發表於2017-03-10

世界上最崩潰的事就是,在你快文章收尾的時候,瀏覽器因為意外關閉導致前功盡棄

社群的快取功能好像對我這次沒起作用,哎,再來一次吧,真是瞬間洩氣的感覺!!!: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 有兩種執行模式 FPMCLI,想要開啟模組有一個實用的命令 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
file

這裡我使用的方式是通過 SSH,注意紅框處,表示 PHP-CLI 模式也已經開啟了 xdebug 模組,如果沒有開啟我們需要開啟一下,還是上面說到的那個命令 sudo phpenmod -s cli xdebug
file

配置完成後,我們配置使用一下這個 CLI Interpreter,注意紅框,必須配置目錄對映,至於原因下文說
file

到這裡,針對單檔案除錯的配置就算做完啦!我們除錯一個檔案試試!
file

針對整個專案的配置

下面說的配置和上面配置可以說沒有任何關係啦,大家可以忘掉剛才配置的事兒,繼續下一個。和除錯單個檔案不同的是,針對整個專案除錯,需要我們先配置一個 server。同樣的,一定要配置目錄對映
file

儲存後,我們的配置可以說就完啦!(不過為了除錯的方便,我們增加一個其他的配置,這個稍後講。)

打斷一下,不知道大家發現沒有,不管針對單個檔案還是針對整個專案的配置,都有一個For current project 的字樣。沒錯,這些配置只會對當前專案生效,如果再開啟一個新專案,這些配置是需要重新配置的!(不過已經配置的專案是會保留的)

我們請求專案測試之前,先打上幾個斷點,要不是看不到效果的:
file

如昨天原理說的,訪問之前我們還需要開啟一下 9000 埠 的監聽,開啟選單欄
file

開啟後,現在我們開啟瀏覽器,訪問專案當前打過斷點的路由。記得加我們的除錯標識
file

這時我們的 phpstorm 應該會蹦出一個除錯欄,和許多除錯資訊
file

如果沒有彈出除錯欄,但是瀏覽器一直在轉圈,沒有輸出結果,百分之百是因為除錯欄當中有其他除錯的 tab,這就需要我們手動開啟除錯欄全部關掉!

到這裡,其實我們的配置已經完成了,已經可以進行遠端除錯了。但是剛才說的未完全的配置還有什麼?
還是我們的 選單欄 > Run > Edit Configurations
file

這裡我們增加一個 PHP Web Application 型別的專案,配置如圖。這個配置有什麼用呢?配置完這個後,當我們在 IDE 點選 選單欄 > Run > Debug 的時候,會彈出下面的框
file
我們選擇剛才配置的xdebug-myblog,這時就會在瀏覽器開啟一個帶 debug 標示的專案連結,不用我們手動輸入連結了

TIPS

  1. 每次需要除錯都需要手動寫那個引數太麻煩了怎麼辦?
    已經有人幫你想好啦,chrome 可以安裝一個外掛xdebug helper
    file
    開啟這個外掛後,我們的連結不用加那個引數也可以除錯了!
    file

他的工作原理是,設定一個cookie,如下圖所示。(XDEBUG_SESSION_START 支援 getpostcookie 三種方式告訴 PHP 開啟除錯)
file

2 . 為什麼一定要設定目錄對映?
我的理解是,無論那種除錯模式,實際上執行的都是 Homestead 中的專案和檔案,所以開啟對映就相當於給 Homestead 中的專案打斷點,和 PHP 執行的檔案就統一了!這樣才能成功。這裡有一個回答,我覺得和我理解的是一個意思 Remote debugging path mapping

其實 xdebug 不僅能除錯,也可以作為 Profile 和 Trace 工具,當然,@MrJing 說的追蹤專案原始碼也是一個利器!最後祝大家能早日成為"高階程式設計師",筆芯 :joy:

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章