前段時間說過如何使用 Sdebug(Xdebug)來除錯 Swoole,現在 PHP8 和 Xdebug3 都發布了,也有小夥伴在 Swoole 的 ISSUE 中詢問 Xdebug 的支援,不過如果還繼續相容 Xdebug 的話肯定不是一件容易的事情。
於是 Swoole 開發組成員 @codinghuang 開發了一個新的除錯擴充套件,名為 Yasd ,另一個 Swoole 偵錯程式。
先簡單概述一下這個偵錯程式能幹什麼:
- 除錯協程
- 斷點除錯
- 斷點快取
- 檢視呼叫棧
- 單步除錯
- .....
更多功能敬請期待~包括 PHP8 的支援和整合 IDE 的支援。
下面就來看看如何使用這個偵錯程式:
安裝擴充套件
需要先安裝 Yasd 擴充套件
phpize --clean && \
phpize && \
./configure && \
make clean && \
make && \
make install
設定 php.ini 檔案:
zend_extension=yasd.so
檢視擴充套件資訊:
php --ri yasd
開始除錯
安裝成功之後,在需要除錯時,增加-e
引數,如
php -e test.php
你就會看到這樣的輸出
$ php -e test.php
[Welcome to yasd, the Swoole debugger]
[You can set breakpoint now]
>
可用命令
接著就可以來使用一些命令進行除錯了,所有命令都支援優先順序模糊匹配,如li
、lis
、list
都等於l
,表示檢視原始碼。
檢視原始碼 list
l
設定斷點
b 檔案的絕對路徑 需要斷點的行號
預設會將斷點資訊儲存在快取檔案 .breakpoints_file.log
中;
你也可以通過修改 php.ini 指定此檔名,如:
yasd.breakpoints_file=yasd.log
如果快取檔案存在,當啟動除錯時,檔案中的斷點資訊會被自動載入;
刪除斷點 delete
d 檔案的絕對路徑 斷點所在的行號
如果設定或者刪除斷點時,不指定檔案絕對路徑,預設是當前停留的檔案。
執行 run
r
下一步 step over
n
遇到函式的時候,不會進入函式內部
下一步 step into
s
遇到函式的時候,會進入函式內部
跳出當前函式 finish
f
檢視呼叫棧
bt
檢視所有斷點資訊 info
i
繼續執行 continue
c
退出 quit
q
列印變數 print
p
變數名字不需要帶$
,例如:
p a
p this
p this->prop
檢視當前所在的協程 level
le
一些小細節
- 列印斷點格式
filename:lineno
如果你是在 IDE 中除錯,可以直接點選跳轉到對應的檔案
- 自動快取斷點資訊
預設會將斷點資訊儲存在快取檔案 .breakpoints_file.log
中,如果快取檔案存在,當啟動除錯時,檔案中的斷點資訊會被自動載入。
- 設定斷點和刪除斷點
如果不指定檔案絕對路徑,預設是當前停留的檔案。
- 自動重複命令
如果不輸入命令直接回車,預設是上一條命令
- 更多細節等你來發現