前段时间说过如何应用 Sdebug(Xdebug)来调试 Swoole,当初 PHP8 和 Xdebug3 都公布了,也有小伙伴在 Swoole 的 ISSUE 中询问 Xdebug 的反对,不过如果还持续兼容 Xdebug 的话必定不是一件容易的事件。
于是 Swoole 开发组成员 @codinghuang 开发了一个新的调试扩大,名为 Yasd ,另一个 Swoole 调试器。
先简略概述一下这个调试器能干什么:
- 调试协程
- 断点调试
- 断点缓存
- 查看调用栈
- 单步调试
- …..
更多功能敬请期待~包含 PHP8 的反对和集成 IDE 的反对。
上面就来看看如何应用这个调试器:
装置扩大
须要先装置 Yasd 扩大
<code class="bash">phpize --clean && \ phpize && \ ./configure && \ make clean && \ make && \ make install
设置 php.ini 文件:
<code class="ini">zend_extension=yasd.so
查看扩大信息:
<code class="bash">php --ri yasd
开始调试
装置胜利之后,在须要调试时,减少-e
参数,如
<code class="bash">php -e test.php
你就会看到这样的输入
<code class="bash">$ php -e test.php [Welcome to yasd, the Swoole debugger] [You can set breakpoint now] >
可用命令
接着就能够来应用一些命令进行调试了,所有命令都反对优先级含糊匹配,如li
、lis
、list
都等于l
,示意查看源码。
查看源码 list
<code class="bash">l
设置断点
<code class="bash">b 文件的绝对路径 须要断点的行号
默认会将断点信息保留在缓存文件 .breakpoints_file.log
中;
你也能够通过批改 php.ini 指定此文件名,如:
<code class="ini">yasd.breakpoints_file=yasd.log
如果缓存文件存在,当启动调试时,文件中的断点信息会被主动加载;
删除断点 delete
<code class="bash">d 文件的绝对路径 断点所在的行号
如果设置或者删除断点时,不指定文件绝对路径,默认是以后停留的文件。
运行 run
<code class="bash">r
下一步 step over
<code class="bash">n
遇到函数的时候,不会进入函数外部
下一步 step into
<code class="bash">s
遇到函数的时候,会进入函数外部
跳出以后函数 finish
<code class="bash">f
查看调用栈
<code class="bash">bt
查看所有断点信息 info
<code class="bash">i
持续运行 continue
<code class="bash">c
退出 quit
<code class="bash">q
打印变量 print
<code class="bash">p
变量名字不须要带$
,例如:
<code class="bash">p a p this p this->prop
查看以后所在的协程 level
<code class="bash">le
一些小细节
- 打印断点格局
filename:lineno
如果你是在 IDE 中调试,能够间接点击跳转到对应的文件
- 主动缓存断点信息
默认会将断点信息保留在缓存文件 .breakpoints_file.log
中,如果缓存文件存在,当启动调试时,文件中的断点信息会被主动加载。
- 设置断点和删除断点
如果不指定文件绝对路径,默认是以后停留的文件。
- 主动反复命令
如果不输出命令间接回车,默认是上一条命令
- 更多细节等你来发现