最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Swoole 如何使用 Xdebug 进行单步调试

    正文概述 转载于:掘金(沈唁)   2021-02-08   393

    php-FPM 中使用 Xdebug 的人应该不少,而在 Swoole 中使用 Xdebug 的人还是很少的,原因是 Swoole 扩展明确说明了和 Xdebug 扩展冲突

    不过好在我们社区成员给力,提供了一个 Sdebug ,在此我们应该感谢 @mabu233 和 @huanghantao 进行了兼容,让 Xdebug 可用于 Swoole 环境进行断点、调试

    之前在 Swoole 文档中补充了 Sdebug 的安装,同样的 Sdebug 的 README 也进行了修改介绍如何安装,不过都是简单说明如何成功加载扩展,没有详细说明配置

    先说一下如何安装 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
    

    查看是否加载成功

    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

    Swoole 如何使用 Xdebug 进行单步调试

    1 是为了我们不加断点的时候,自动给第一行断点

    2 是修改配置的remote_port端口

    Preferences | Languages & Frameworks | PHP | Servers 添加一个服务

    Swoole 如何使用 Xdebug 进行单步调试

    紧接着在右上角这里添加一个调试,选择 PHP Remote Debug

    Swoole 如何使用 Xdebug 进行单步调试

    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 对象的地方

    Swoole 如何使用 Xdebug 进行单步调试

    然后下一步下一步...

    start 之后我们使用 telnet 进行连接,发送一个消息,断点就进入到 Connect 这里,然后我们再下一步,终端才会输出Connect

    紧接着我们会到 var_dump 的地方,就可以看到 $data 的值是11111rn

    Swoole 如何使用 Xdebug 进行单步调试

    然后来一个 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("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
    });
    $http->start();
    

    这里需要在访问时加上一个XDEBUG_SESSION_START参数或者在 Cookie 中添加也可以

    浏览器访问http://127.0.0.1:9501/?XDEBUG_SESSION_START=xdebug

    也是可以断点调试的

    Swoole 如何使用 Xdebug 进行单步调试

    框架的使用也是同理的,至于其他的什么和 docker 一起使用等等自己研究吧...

    这里放一张调试 Hyperf 的截图

    Swoole 如何使用 Xdebug 进行单步调试

    还有一个 Tips,把右上角的电话图标选择为上图那样,会在命令行启动服务时自动调起 Debug 服务

    原文发布于Swoole问答,转载请注明出处。


    起源地下载网 » Swoole 如何使用 Xdebug 进行单步调试

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元