另外一个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官方公众号

相关文章
相关标签/搜索