关于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 服务。

相关文章
相关标签/搜索