# SDHelper
SDHelper是SwooleDistributed隆重推出的開發者工具,配合最新版本的SD框架可以實現遠程斷點調試的功能。
入群獲取:569037921
git獲取:https://github.com/SwooleDistributed/SDHelper-Bin
## SD遠程斷點調試
我們打開工具選擇SD調試,在右側默認填寫了連接地址。

需要下載安裝最新的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點擊連接按鈕。連接傷后可以通過輸入文件名打開對應文件,通過添加斷點按鈕來添加斷點。

然后點擊開始調試
> 點擊開始調試后就不能添加斷點了,可以斷開調試,重新下斷點
我們訪問對應的邏輯。

可以看到邏輯已經進入斷點處,可以查看當前所有的變量信息,點擊繼續執行按鈕,可以跳轉到下一處斷點

> 調試器只會捕獲一次請求,也就是說斷點只會斷在一個請求上,對于其他的請求不會有影響,并發請求時斷點只會影響到其中一個請求上。
如果請求結束還想繼續捕獲的話,可以點擊重新捕獲按鈕,如果想結束調試可以點擊結束調試按鈕。
> 遠程調試器可以查看當前斷點的所有數據,這是var_dump和print_f大法無法替代的優勢,而且可以隨時打斷點不必修改代碼,并且只會捕獲其中一次的請求,不會眼花繚亂。但是也有限制,不支持自定義進程的調試,代碼必須在app目錄下才支持遠程調試。
## 代碼覆蓋率測試
代碼覆蓋率測試需要啟動特殊的命令執行
```
php start_swoole_server.php coverage
```
含有2個額外參數
* -c 清除上次保存的數據
* -d 守護進程運行
coverage啟動會對性能有所影響,所以不適合壓測。
此時可以叫測試進行全方位的測試,測試結束可以查看測試的代碼覆蓋率。

沒有顏色的代表沒有被執行到,顏色越紅代表執行的次數越多。
可以通過調用次數排名來查看代碼執行次數的排行

如果次數過高需要注意是不是存在大量的循環需要優化,或者出現了死循環。
## TCP/WS連接調試!
工具提供了tcp和ws的連接調試,比市面上的工具都會更加好用些

## 協議二進制數據構建
可以通過工具的Hex數據構建來模擬各類協議的組成,方便理解協議的構成。

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