另外一個Swoole調試器 - Yasd

前段時間說過如何使用 Sdebug(Xdebug)來調試 Swoole,如今 PHP8 和 Xdebug3 都發布了,也有小夥伴在 Swoole 的 ISSUE 中詢問 Xdebug 的支持,不過若是還繼續兼容 Xdebug 的話確定不是一件容易的事情。php

因而 Swoole 開發組成員 @codinghuang 開發了一個新的調試擴展,名爲 Yasd ,另外一個 Swoole 調試器。git

先簡單概述一下這個調試器能幹什麼:github

  1. 調試協程
  2. 斷點調試
  3. 斷點緩存
  4. 查看調用棧
  5. 單步調試
  6. .....

更多功能敬請期待~包括 PHP8 的支持和集成 IDE 的支持。緩存

下面就來看看如何使用這個調試器:bash

安裝擴展

須要先安裝 Yasd 擴展swoole

phpize --clean && \
phpize && \
./configure && \
make clean && \
make && \
make install

設置 php.ini 文件:函數

zend_extension=yasd.so

查看擴展信息:ui

php --ri yasd

開始調試

安裝成功以後,在須要調試時,增長-e參數,如this

php -e test.php

你就會看到這樣的輸出spa

$ 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官方公衆號

相關文章
相關標籤/搜索