PHPSTORM+Xdebug+PHP

城裡的野山參發表於2021-11-17

本篇文章,主要關於如何使用 PHPXdebug 擴充套件來對程式碼進行除錯,使用 PHPStorm

涉及兩種情況:

  1. 執行環境在本地區域網內(非本機)
  2. 執行環境在外網(公網)

參考文章:
可能是全網最詳細的PhpStorm+xdebug遠端除錯php程式碼的教程
Xdebug 遠端除錯,你會用嗎?

Debug原理

PHPSTORM+Xdebug+PHP

XdebugPHPStorm 建立連線的過程。

PHPSTORM+Xdebug+PHP

統一的配置

下面是一些統一的配置。

伺服器

配置 php.ini ,下面各配置項的具體含義可翻閱參考文章或官方文件,此處僅做展示。

zend_extension=xxx
xdebug.client_port=9001
xdebug.mode=debug //必須填debug模式
xdebug.idekey=PHPSTORM
PHPStorm

IDE 的配置分為兩個部分,如圖,參考文章內的介紹實測可用。
PHPSTORM+Xdebug+PHP

這裡需要注意的是 Use path mappings,需要保證本地的程式碼和伺服器上的程式碼完全一致。
PHPSTORM+Xdebug+PHP

執行環境在本機區域網內(非本機)

除了統一配置之外,針對區域網環境的 php.ini 配置。

xdebug.discover_client_host=on

執行環境在外網(非區域網或公網)

xdebug.client_host=127.0.0.1 //必須是127.0.0.1 或者 localhost

公網相比於區域網有一些特殊,在於本機(也就是 PHPStorm)的定位問題,通過 IP 無法定位到本機,也就無法和 PHPStorm 建立連線,這裡需要用到 SSH 的隧道轉發,如何配置,參考文章裡列舉了兩種不同的設定方式,包括如何檢驗是否配置OK。

使用注意點

  1. php.ini 配置修改之後,要重啟 php-fpm
  2. phpstorm 開啟 debug 的順序
    開啟之前
    PHPSTORM+Xdebug+PHP
    正常開啟之後,可以看到小圖示的狀態發生了變化
    PHPSTORM+Xdebug+PHP
  3. 配置 servers 時要注意 mapping ,確保本機和伺服器的程式碼一致(使用 git 或者 ftp 較方便),以免找不到程式碼
  4. 伺服器埠放開,需要檢查安全組以及防火牆( selinux, firewalld , iptables)
  5. 觸發 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
PHPSTORM+Xdebug+PHP
mapping 除了根目錄匹配之外,還需要配置 index.phpvendor 以及你需要 debug 的檔案目錄。

PHPSTORM+Xdebug+PHP

本作品採用《CC 協議》,轉載必須註明作者和本文連結
城裡的野山參