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

简介: 在 PHP-FPM 中使用 Xdebug 的人应该不少,而在 Swoole 中使用 Xdebug 的人还是很少的,原因是 Swoole 扩展明确说明了和 Xdebug 扩展冲突不过好在提供了一个 Sdebug 进行了兼容,让 Xdebug 可用于 Swoole 环境进行断点、调试

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


如何安装 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.png


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

2 是修改配置的remote_port端口

Preferences | Languages & Frameworks | PHP | Servers

添加一个服务


2.png


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


3.png


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


微信图片_20220426165209.png


然后下一步下一步...

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

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


5.png


然后来一个 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

也是可以断点调试的


6.png


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

这里放一张调试 Hyperf 的截图


7.png


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


目录
相关文章
|
4天前
|
IDE PHP 开发工具
除了Xdebug,还有哪些常用的PHP调试工具?
这些调试工具各有特点,开发者可以根据自己的需求和习惯选择适合的工具。在实际开发中,结合多种工具的使用往往能够更全面、更深入地进行调试,提高开发效率和代码质量。同时,随着技术的不断发展,新的调试工具也在不断涌现,开发者需要保持学习和关注,以便及时掌握最新的调试技术和工具。
16 1
|
13天前
|
IDE PHP 开发工具
【PHP开发专栏】Xdebug在PHP调试中的应用
Xdebug 是一个功能强大的 PHP 扩展,提供调试、代码分析和性能分析等功能。本文介绍了 Xdebug 的基本概念、安装配置方法及在 PHP 调试中的应用技巧,包括断点调试、堆栈跟踪、远程调试和性能分析等。通过合理使用 Xdebug,可以显著提高调试效率和代码质量。
28 3
|
Web App开发 IDE 应用服务中间件
phpstorm+xdebug 配置断点调试
阅读tp框架源码过程中,经常被代码绕来绕去,头晕的很(tp框架源码已很久没有更新);
257 0
|
11月前
|
Dart 前端开发 JavaScript
swoole(一)laravel8配置使用swoole(1)
然后在服务器使用命令行执行 复制代码
343 0
|
11月前
|
前端开发 应用服务中间件 网络安全
swoole(一)laravel8配置使用swoole(2)
将上边我使用xxx代替的部分改成你自己的信息。 特别说明一下:我这里使用了ssl证书,如果您没有相关的配置,把https那部分换掉就好。 具体的配置含义,请参考官方文档:
110 0
|
11月前
|
前端开发 小程序 JavaScript
swoole(一)laravel8配置使用swoole(3)
Laravel-swoole的优势就是将swoole插件集成至laravel-s插件中,当前laravel-s插件启动的时候,同时持久化的启动了swoole,不需要我们再服务器端再启动一次swoole。
154 0
Phpstorm+Xdebug配置断点调试
Phpstorm+Xdebug配置断点调试
154 0
Phpstorm+Xdebug配置断点调试
|
Web App开发 JavaScript IDE
|
缓存 IDE PHP
另一个Swoole调试器-Yasd
前段时间说过如何使用 Sdebug(Xdebug)来调试 Swoole,现在 PHP8 和 Xdebug3 都发布了,也有小伙伴在 Swoole 的 ISSUE 中询问 Xdebug 的支持,不过如果还继续兼容 Xdebug 的话肯定不是一件容易的事情。 于是 Swoole 开发组成员 @codinghuang 开发了一个新的调试扩展,名为 Yasd ,另一个 Swoole 调试器。
276 0
|
网络协议 关系型数据库 MySQL
Swoole v4.7.0 版本正式发布,Swoole 官网支持直接运行 Swoole 代码
在 Swoole 官网增加了 在线运行 的按钮,可以直接运行首页提供的一些示例代码,当然也可以手动输出一些 PHP 代码进行测试。 可以访问 Swoole 官网首页进行测试使用:https://www.swoole.com/ 目前还处于测试阶段,有遇到 BUG 可以向识沃科技客服反馈或交流群中反馈。
261 0