關於PHP:Swoole 如何使用 Xdebug 進行單步調試!

在 PHP-FPM 中使用 Xdebug 的人應該很多,而在 Swoole 中使用 Xdebug 的人仍是不多的,緣由是 Swoole 擴展明確說明了和 Xdebug 擴展衝突php

以前在 Swoole 文檔中補充了 Sdebug 的安裝,一樣的 Sdebug 的 README 也進行了修改介紹如何安裝,不過都是簡單說明如何成功加載擴展,沒有詳細說明配置html

先說一下如何安裝 Sdebuggit

爲了不 Swoole 的檢測 Xdebug 警告,因此擴展註冊的名稱是 Sdebuggithub

git clone git@github.com:swoole/sdebug.git -b sdebug_2_9 --depth=1

cd sdebug

phpize
./configure
make clean
make
make install

步驟很簡單,就是 clone 源碼,進入目錄而後編譯docker

若是你的 PHP 是通用安裝,沒有修改默認位置等等,也能夠直接運行目錄下的腳本:瀏覽器

./rebuild.sh

若是你的 phpize 不是默認路徑的話,請使用絕對路徑;一樣的 php-config 須要使用--with-php-config=加上你的絕對路徑服務器

編譯成功後須要在 php.ini 加載擴展swoole

zend_extension=xdebug.so

編譯完成後生成的 so 文件名仍是 xdebug框架

查看是否加載成功ide

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 Swoole\Server('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 的值是11111\r\n

而後來一個 HTTP Server

$http = new Swoole\Http\Server('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("<h1>Hello Swoole. #".rand(10009999)."</h1>");
});

$http->start();

這裏須要在訪問時加上一個XDEBUG_SESSION_START參數或者在 Cookie 中添加也能夠

瀏覽器訪問http://127.0.0.1:9501/?XDEBUG_SESSION_START=xdebug

也是能夠斷點調試的

框架的使用也是同理的,至於其餘的什麼和 docker 一塊兒使用等等本身研究吧...

這裏放一張調試 Hyperf 的截圖

還有一個 Tips,把右上角的電話圖標選擇爲上圖那樣,會在命令行啓動服務時自動調起 Debug 服務。

相關文章
相關標籤/搜索