首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
另一个Swoole调试器 - Yasd
前段时间说过如何使用Sdebug(Xdebug)来调试Swoole,现在PHP8和Xdebug3都发布了,也有小伙伴在Swoole的ISSUE中询问Xdebug的支持,不过如果还继续兼容Xdebug的话肯定不是一件容易的事情。 于是Swoole开发组成员 [@codinghuang](https://github.com/huanghantao) 开发了一个新的调试扩展,名为 [Yasd](https://github.com/swoole/yasd) ,另一个Swoole调试器。 先简单概述一下这个调试器能干什么: 1. 调试协程 2. 断点调试 3. 断点缓存 4. 查看调用栈 5. 单步调试 6. ..... 更多功能敬请期待~包括PHP8的支持和集成IDE的支持。 下面就来看看如何使用这个调试器: ## 安装扩展 需要先安装Yasd扩展 ```bash phpize --clean && \ phpize && \ ./configure && \ make clean && \ make && \ make install ``` 设置 php.ini 文件: ```ini zend_extension=yasd.so ``` 查看扩展信息: ```bash php --ri yasd ``` ## 开始调试 安装成功之后,在需要调试时,增加`-e`参数,如 ```bash php -e test.php ``` 你就会看到这样的输出 ```bash $ php -e test.php [Welcome to yasd, the Swoole debugger] [You can set breakpoint now] > ``` ## 可用命令 接着就可以来使用一些命令进行调试了,所有命令都支持优先级模糊匹配,如`li`、`lis`、`list`都等于`l`,表示查看源码。 ### 查看源码 list ```bash l ``` ### 设置断点 ```bash b 文件的绝对路径 需要断点的行号 ``` 默认会将断点信息保存在缓存文件 `.breakpoints_file.log` 中; 你也可以通过修改 php.ini 指定此文件名,如: ```ini yasd.breakpoints_file=yasd.log ``` 如果缓存文件存在,当启动调试时,文件中的断点信息会被自动加载; ### 删除断点 delete ```bash d 文件的绝对路径 断点所在的行号 ``` 如果设置或者删除断点时,不指定文件绝对路径,默认是当前停留的文件。 ### 运行 run ```bash r ``` ### 下一步 step over ```bash n ``` 遇到函数的时候,不会进入函数内部 ### 下一步 step into ```bash s ``` 遇到函数的时候,会进入函数内部 ### 跳出当前函数 finish ```bash f ``` ### 查看调用栈 ```bash bt ``` ### 查看所有断点信息 info ```bash i ``` ### 继续运行 continue ```bash c ``` ### 退出 quit ```bash q ``` ### 打印变量 print ```bash p ``` 变量名字不需要带`$`,例如: ```bash p a p this p this->prop ``` ### 查看当前所在的协程 level ```bash le ``` ## 一些小细节 * 打印断点格式`filename:lineno` 如果你是在IDE中调试,可以直接点击跳转到对应的文件 * 自动缓存断点信息 默认会将断点信息保存在缓存文件 `.breakpoints_file.log` 中,如果缓存文件存在,当启动调试时,文件中的断点信息会被自动加载。 * 设置断点和删除断点 如果不指定文件绝对路径,默认是当前停留的文件。 * 自动重复命令 如果不输入命令直接回车,默认是上一条命令 * 更多细节等你来发现
发布于4年前 · 33 次浏览 · 来自
公告
鲁飞
前段时间说过如何使用Sdebug(Xdebug)来调试Swoole,现在PHP8和Xdebug3都发布了,也有小伙伴在Swoole的ISSUE中询问Xdebug的支持,不过如果还继续兼容Xdebug的话肯定不是一件容易的事情。 于是Swoole开发组成员 [@codinghuang](https://github.com/huanghantao) 开发了一个新的调试扩展,名为 [Yasd](https://github.com/swoole/yasd) ,另一个Swoole调试器。 先简单概述一下这个调试器能干什么: 1. 调试协程 2. 断点调试 3. 断点缓存 4. 查看调用栈 5. 单步调试 6. ..... 更多功能敬请期待~包括PHP8的支持和集成IDE的支持。 下面就来看看如何使用这个调试器: ## 安装扩展 需要先安装Yasd扩展 ```bash phpize --clean && \ phpize && \ ./configure && \ make clean && \ make && \ make install ``` 设置 php.ini 文件: ```ini zend_extension=yasd.so ``` 查看扩展信息: ```bash php --ri yasd ``` ## 开始调试 安装成功之后,在需要调试时,增加`-e`参数,如 ```bash php -e test.php ``` 你就会看到这样的输出 ```bash $ php -e test.php [Welcome to yasd, the Swoole debugger] [You can set breakpoint now] > ``` ## 可用命令 接着就可以来使用一些命令进行调试了,所有命令都支持优先级模糊匹配,如`li`、`lis`、`list`都等于`l`,表示查看源码。 ### 查看源码 list ```bash l ``` ### 设置断点 ```bash b 文件的绝对路径 需要断点的行号 ``` 默认会将断点信息保存在缓存文件 `.breakpoints_file.log` 中; 你也可以通过修改 php.ini 指定此文件名,如: ```ini yasd.breakpoints_file=yasd.log ``` 如果缓存文件存在,当启动调试时,文件中的断点信息会被自动加载; ### 删除断点 delete ```bash d 文件的绝对路径 断点所在的行号 ``` 如果设置或者删除断点时,不指定文件绝对路径,默认是当前停留的文件。 ### 运行 run ```bash r ``` ### 下一步 step over ```bash n ``` 遇到函数的时候,不会进入函数内部 ### 下一步 step into ```bash s ``` 遇到函数的时候,会进入函数内部 ### 跳出当前函数 finish ```bash f ``` ### 查看调用栈 ```bash bt ``` ### 查看所有断点信息 info ```bash i ``` ### 继续运行 continue ```bash c ``` ### 退出 quit ```bash q ``` ### 打印变量 print ```bash p ``` 变量名字不需要带`$`,例如: ```bash p a p this p this->prop ``` ### 查看当前所在的协程 level ```bash le ``` ## 一些小细节 * 打印断点格式`filename:lineno` 如果你是在IDE中调试,可以直接点击跳转到对应的文件 * 自动缓存断点信息 默认会将断点信息保存在缓存文件 `.breakpoints_file.log` 中,如果缓存文件存在,当启动调试时,文件中的断点信息会被自动加载。 * 设置断点和删除断点 如果不指定文件绝对路径,默认是当前停留的文件。 * 自动重复命令 如果不输入命令直接回车,默认是上一条命令 * 更多细节等你来发现
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
还没有评论!
微信公众号
热门内容
作者其它话题
- thinkphp5.1在使用think-swoole的时候报错unsupported option [host]
- WSL 下服务器响应数据过大无法接收
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。