本篇文章,主要關於如何使用 PHP
的 Xdebug
擴充套件來對程式碼進行除錯,使用 PHPStorm
。
涉及兩種情況:
- 執行環境在本地區域網內(非本機)
- 執行環境在外網(公網)
參考文章:
可能是全網最詳細的PhpStorm+xdebug遠端除錯php程式碼的教程
Xdebug 遠端除錯,你會用嗎?
Debug原理
Xdebug
與 PHPStorm
建立連線的過程。
統一的配置
下面是一些統一的配置。
伺服器
配置 php.ini
,下面各配置項的具體含義可翻閱參考文章或官方文件,此處僅做展示。
zend_extension=xxx
xdebug.client_port=9001
xdebug.mode=debug //必須填debug模式
xdebug.idekey=PHPSTORM
PHPStorm
IDE
的配置分為兩個部分,如圖,參考文章內的介紹實測可用。
這裡需要注意的是 Use path mappings
,需要保證本地的程式碼和伺服器上的程式碼完全一致。
執行環境在本機區域網內(非本機)
除了統一配置之外,針對區域網環境的 php.ini
配置。
xdebug.discover_client_host=on
執行環境在外網(非區域網或公網)
xdebug.client_host=127.0.0.1 //必須是127.0.0.1 或者 localhost
公網相比於區域網有一些特殊,在於本機(也就是 PHPStorm
)的定位問題,通過 IP
無法定位到本機,也就無法和 PHPStorm
建立連線,這裡需要用到 SSH
的隧道轉發,如何配置,參考文章裡列舉了兩種不同的設定方式,包括如何檢驗是否配置OK。
使用注意點
php.ini
配置修改之後,要重啟php-fpm
phpstorm
開啟debug
的順序
開啟之前
正常開啟之後,可以看到小圖示的狀態發生了變化- 配置
servers
時要注意mapping
,確保本機和伺服器的程式碼一致(使用git
或者ftp
較方便),以免找不到程式碼 - 伺服器埠放開,需要檢查安全組以及防火牆(
selinux
,firewalld
,iptables
) - 觸發
debug
只需要在請求連結後加?XDEBUG_SESSION_START=xxx(隨意填寫)
,或者是在cookie
中設定DEBUG_SESSION=xxx(隨意填寫)
。都可以觸發debug
。
changelog
20211118
碰到了 mapping
問題,按照前面的步驟全部弄妥當之後,發起請求依然無法正常 debug
。如果正常監聽,發起請求之後,phpstorm
右下角會有一個 warning
的彈窗提示,提示檔案 mapping
設定存在問題,可以開啟 Run->Break at file line in PHP scripts
從指令碼的第一行開始 debug
。mapping
除了根目錄匹配之外,還需要配置 index.php
,vendor
以及你需要 debug
的檔案目錄。
本作品採用《CC 協議》,轉載必須註明作者和本文連結