在 PHP-FPM 中使用 Xdebug 的人應該不少,而在 Swoole 中使用 Xdebug 的人還是很少的,原因是 Swoole 擴展明確說明了和 Xdebug 擴展沖突,接下來就和大家分享一下swoole教程
先說一下如何安裝 Sdebug
為了避免 Swoole 的檢測 Xdebug 警告,所以擴展注冊的名稱是 Sdebug
git clone git@github.com:swoole/sdebug.git -b sdebug_2_9 --depth=1 cd sdebug phpize ./configure make clean make make install
步驟很簡單,就是 clone 源碼,進入目錄然后編譯
如果你的 PHP 是通用安裝,沒有修改默認位置等等,也可以直接運行目錄下的腳本:
./rebuild.sh
如果你的 phpize 不是默認路徑的話,請使用絕對路徑;同樣的 php-config 需要使用--with-php-config=加上你的絕對路徑
編譯成功后需要在 php.ini 加載擴展
zend_extension=xdebug.so
編譯完成后生成的 so 文件名還是 xdebug
查看是否加載成功
php --ri sdebug
別走,還沒完,還需要一些其他的配置,不然你去斷點會發現不起作用
我們還需要在 php.ini 中加入這幾個配置項
xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.remote_host=localhost xdebug.remote_port=8000 xdebug.idekey="xdebug"
一個配置難倒英雄漢,很多人在使用 Sdebug 的時候就會遇到需要這樣問題,不起作用,就吐槽不好用,實際上是你的姿勢不對,配置項沒加或者加錯了
需要配合 PhpStorm 的話,還需要設置一下 PhpStorm 的配置
Preferences | Languages & Frameworks | PHP | Debug
1 是為了我們不加斷點的時候,自動給第一行斷點
2 是修改配置的remote_port端口
Preferences | Languages & Frameworks | PHP | Servers
添加一個服務
緊接著在右上角這里添加一個調試,選擇 PHP Remote Debug
server 選擇我們剛才創建的 server,IDE key 就填我們 php.ini 中配置的xdebug
然后我們來試驗一波,看看好不好使
先來一個簡單的 TCP Server
//創建Server對象,監聽 127.0.0.1:9501 端口 $server = new SwooleServer('127.0.0.1', 9501); //監聽連接進入事件 $server->on('Connect', function ($server, $fd) { echo "Client: Connect.n";}); //監聽數據接收事件 $server->on('Receive', function ($server, $fd, $from_id, $data) { var_dump($data); $server->send($fd, "Server: " . $data); }); //監聽連接關閉事件 $server->on('Close', function ($server, $fd) { echo "Client: Close.n";}); //啟動服務器 $server->start();
點擊右上角的綠色蟲子進入 Debug 狀態,啟動我們的服務,會發現自動斷在了第 4 行創建 Server 對象的地方
然后下一步下一步...
start 之后我們使用 telnet 進行連接,發送一個消息,斷點就進入到 Connect 這里,然后我們再下一步,終端才會輸出Connect
緊接著我們會到 var_dump 的地方,就可以看到 $data 的值是11111rn
然后來一個 HTTP Server
$http = new SwooleHttpServer('0.0.0.0', 9501); $http->on('request', function ($request, $response) { var_dump($request->server); $response->header("Content-Type", "text/html; charset=utf-8"); $response->end("Hello Swoole. #".rand(1000, 9999).""); }); $http->start();
這里需要在訪問時加上一個XDEBUG_SESSION_START參數或者在 Cookie 中添加也可以
瀏覽器訪問http://127.0.0.1:9501/?XDEBUG_SESSION_START=xdebug
也是可以斷點調試的
框架的使用也是同理的,至于其他的什么和 docker 一起使用等等自己研究吧...
這里放一張調試 Hyperf 的截圖
還有一個 Tips,把右上角的電話圖標選擇為上圖那樣,會在命令行啟動服務時自動調起 Debug 服務
以上就是這次分享的所有內容了,想要獲取swoole相關資訊或者教程歡迎關注編程學習網!
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://phpxs.com/post/7925/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料