# SDHelper
SDHelper是SwooleDistributed隆重推出的开发者工具,配合最新版本的SD框架可以实现远程断点调试的功能。
入群获取:569037921
git获取:https://github.com/SwooleDistributed/SDHelper-Bin
## SD远程断点调试
我们打开工具选择SD调试,在右侧默认填写了连接地址。
![](https://box.kancloud.cn/c751db1033d9daf38c88397654f99786_964x672.png)
需要下载安装最新的SD框架v3.2.7,找到backstage配置文件打开对应配置
```
//是否启用backstage
$config['backstage']['enable'] = true;
//是否启用xdebug
$config['backstage']['xdebug_enable'] = true;
//web页面访问端口
$config['backstage']['port'] = 18000;
//提供的ws端口
$config['backstage']['socket'] = "0.0.0.0";
$config['backstage']['websocket_port'] = 18083;
//设置路径
$config['backstage']['bin_path'] = "/bin/exec/backstage";
return $config;
```
配置中的websocket_port端口即为远程调试端口,backstage.enable和backstage.xdebug_enable均要设置为true。
接下来使用xdebug启动命令来启动框架
```
php start_swoole_server.php xdebug
```
也可以添加-d选项,变成守护进程,xdebug命令启动服务器不会额外占用服务器资源,开发调试阶段均可使用该命令来代替start,但是使用xdebug后自动reload和reload命令将失效,更新代码必须重启服务器(根据版本的迭代后期会消除这种美中不足)。
> 此处的xdebug和xdebug扩展不是同一个,SD的远程断点调试无需安装xdebug扩展。
通过xdebug命令启动服务器后,可以打开SDHelp点击连接按钮。连接伤后可以通过输入文件名打开对应文件,通过添加断点按钮来添加断点。
![](https://box.kancloud.cn/fd7234a50d50d9e2a2f31849efbb3630_962x672.png)
然后点击开始调试
> 点击开始调试后就不能添加断点了,可以断开调试,重新下断点
我们访问对应的逻辑。
![](https://box.kancloud.cn/e72f48d067f38325e8bce143ae03263c_965x705.png)
可以看到逻辑已经进入断点处,可以查看当前所有的变量信息,点击继续执行按钮,可以跳转到下一处断点
![](https://box.kancloud.cn/fcd33b3e9e4c8484c29c643434989d0c_961x706.png)
> 调试器只会捕获一次请求,也就是说断点只会断在一个请求上,对于其他的请求不会有影响,并发请求时断点只会影响到其中一个请求上。
如果请求结束还想继续捕获的话,可以点击重新捕获按钮,如果想结束调试可以点击结束调试按钮。
> 远程调试器可以查看当前断点的所有数据,这是var_dump和print_f大法无法替代的优势,而且可以随时打断点不必修改代码,并且只会捕获其中一次的请求,不会眼花缭乱。但是也有限制,不支持自定义进程的调试,代码必须在app目录下才支持远程调试。
## 代码覆盖率测试
代码覆盖率测试需要启动特殊的命令执行
```
php start_swoole_server.php coverage
```
含有2个额外参数
* -c 清除上次保存的数据
* -d 守护进程运行
coverage启动会对性能有所影响,所以不适合压测。
此时可以叫测试进行全方位的测试,测试结束可以查看测试的代码覆盖率。
![](https://box.kancloud.cn/f1c6d430270cb6aecd669ca5c65424c5_962x672.png)
没有颜色的代表没有被执行到,颜色越红代表执行的次数越多。
可以通过调用次数排名来查看代码执行次数的排行
![](https://box.kancloud.cn/460cc43f50afe029e6dcb424d1dd3f64_963x672.png)
如果次数过高需要注意是不是存在大量的循环需要优化,或者出现了死循环。
## TCP/WS连接调试!
工具提供了tcp和ws的连接调试,比市面上的工具都会更加好用些
![](https://box.kancloud.cn/2bbd1490cb947b29cc566c1d07f26989_966x690.png)
## 协议二进制数据构建
可以通过工具的Hex数据构建来模拟各类协议的组成,方便理解协议的构成。
![](https://box.kancloud.cn/aab4cb457dae925226a59a71c8a3d819_964x690.png)
SD会不断的成长壮大,为大家提供一个更舒适的开发体验。
- SD3.X简介
- 捐赠SD项目
- VIP服务
- 基础篇
- 搭建环境
- 使用Composer安装/更新SD框架
- 启动命令
- 开发注意事项
- 框架配置
- 配置文件夹
- server.php
- ports.php
- business.php
- mysql.php
- redis.php
- timerTask.php
- log.php
- consul.php
- catCache.php
- client.php
- 自定义配置
- 框架入口
- MVC架构
- 加载器-Loader
- 控制器-Controller
- 模型-Model
- 视图-View
- 同步任务-Task
- 封装器
- Swoole编程指南-EOF协议
- Swoole编程指南-固定包头协议
- 封装器-Pack
- 路由器
- TCP相关
- 绑定UID
- Send系列
- Sub/Pub
- 获取服务器信息
- Http相关
- HttpInput
- HttpOutput
- 默认路由规则
- WebSocket相关
- 使用SSL
- 公共函数
- 进阶篇
- 内核优化
- 封装器路由器原理剖析
- 对象池
- 上下文-Context
- 中间件
- 进程管理
- 创建自定义进程
- 进程间RPC
- 自定义进程如何使用连接池
- 异步连接池
- Redis
- Mysql
- Mqtt
- HttpClient
- Client
- AMQP
- RPC
- 日志工具-GrayLog
- 微服务-Consul
- Consul基础
- 搭建Consul服务器
- SD中Consul配置
- 微服务
- 选举-Leader
- Consul动态配置定时任务
- 熔断与降级
- 集群-Cluster
- 高速缓存-CatCache
- 万物-Actor
- Actor原型
- Actor的创建
- Actor间的通讯
- 消息派发-EventDispatcher
- 延迟队列-TimerCallBack
- 协程
- 订阅与发布
- MQTT简易服务器
- AMQP异步任务调度
- 自定义命令-Console
- 调试工具Channel
- 特别注意事项
- 日常问题总结
- 实践案例
- 物联网自定义协议
- Actor在游戏的应用
- Mongodb以及一些同步扩展的使用
- 自定义进程使用MQTT客户端
- 开发者工具
- SDHelper