另一個Swoole偵錯程式 - Yasd

沈唁發表於2020-12-04

前段時間說過如何使用 Sdebug(Xdebug)來除錯 Swoole,現在 PHP8 和 Xdebug3 都發布了,也有小夥伴在 Swoole 的 ISSUE 中詢問 Xdebug 的支援,不過如果還繼續相容 Xdebug 的話肯定不是一件容易的事情。

於是 Swoole 開發組成員 @codinghuang 開發了一個新的除錯擴充套件,名為 Yasd ,另一個 Swoole 偵錯程式。

先簡單概述一下這個偵錯程式能幹什麼:

  1. 除錯協程
  2. 斷點除錯
  3. 斷點快取
  4. 檢視呼叫棧
  5. 單步除錯
  6. .....

更多功能敬請期待~包括 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]
>

可用命令

接著就可以來使用一些命令進行除錯了,所有命令都支援優先順序模糊匹配,如lilislist都等於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 中,如果快取檔案存在,當啟動除錯時,檔案中的斷點資訊會被自動載入。

  • 設定斷點和刪除斷點

如果不指定檔案絕對路徑,預設是當前停留的檔案。

  • 自動重複命令

如果不輸入命令直接回車,預設是上一條命令

  • 更多細節等你來發現

Swoole官方公眾號

相關文章