首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
Swoole 如何使用 Xdebug 进行单步调试
在 PHP-FPM 中使用 Xdebug 的人应该不少,而在 Swoole 中使用 Xdebug 的人还是很少的,原因是 Swoole 扩展明确说明了和 Xdebug 扩展冲突 不过好在我们社区成员给力,提供了一个 [Sdebug](https://github.com/swoole/sdebug) ,在此我们应该感谢 [@mabu233](https://github.com/mabu233) 和 [@huanghantao](https://github.com/huanghantao) 进行了兼容,让 Xdebug 可用于 Swoole 环境进行断点、调试 之前在 Swoole 文档中补充了 Sdebug 的安装,同样的 Sdebug 的 README 也进行了修改介绍如何安装,不过都是简单说明如何成功加载扩展,没有详细说明配置 先说一下如何安装 Sdebug > 为了避免 Swoole 的检测 Xdebug 警告,所以扩展注册的名称是 Sdebug ```shell 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 是通用安装,没有修改默认位置等等,也可以直接运行目录下的脚本: ```bash ./rebuild.sh ``` 如果你的 phpize 不是默认路径的话,请使用绝对路径;同样的 php-config 需要使用`--with-php-config=`加上你的绝对路径 编译成功后需要在 php.ini 加载扩展 ```ini zend_extension=xdebug.so ``` > 编译完成后生成的 so 文件名还是 xdebug 查看是否加载成功 ```shell php --ri sdebug ``` 别走,还没完,还需要一些其他的配置,不然你去断点会发现不起作用 我们还需要在 php.ini 中加入这几个配置项 ```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 ```php //创建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 ```php $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(1000, 9999)."</h1>"); }); $http->start(); ``` 这里需要在访问时加上一个`XDEBUG_SESSION_START`参数或者在 Cookie 中添加也可以 浏览器访问`http://127.0.0.1:9501/?XDEBUG_SESSION_START=xdebug` 也是可以断点调试的  框架的使用也是同理的,至于其他的什么和 docker 一起使用等等自己研究吧... 这里放一张调试 Hyperf 的截图  还有一个 Tips,把右上角的电话图标选择为上图那样,会在命令行启动服务时自动调起 Debug 服务
发布于4年前 · 27 次浏览 · 来自
分享
鲁飞
在 PHP-FPM 中使用 Xdebug 的人应该不少,而在 Swoole 中使用 Xdebug 的人还是很少的,原因是 Swoole 扩展明确说明了和 Xdebug 扩展冲突 不过好在我们社区成员给力,提供了一个 [Sdebug](https://github.com/swoole/sdebug) ,在此我们应该感谢 [@mabu233](https://github.com/mabu233) 和 [@huanghantao](https://github.com/huanghantao) 进行了兼容,让 Xdebug 可用于 Swoole 环境进行断点、调试 之前在 Swoole 文档中补充了 Sdebug 的安装,同样的 Sdebug 的 README 也进行了修改介绍如何安装,不过都是简单说明如何成功加载扩展,没有详细说明配置 先说一下如何安装 Sdebug > 为了避免 Swoole 的检测 Xdebug 警告,所以扩展注册的名称是 Sdebug ```shell 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 是通用安装,没有修改默认位置等等,也可以直接运行目录下的脚本: ```bash ./rebuild.sh ``` 如果你的 phpize 不是默认路径的话,请使用绝对路径;同样的 php-config 需要使用`--with-php-config=`加上你的绝对路径 编译成功后需要在 php.ini 加载扩展 ```ini zend_extension=xdebug.so ``` > 编译完成后生成的 so 文件名还是 xdebug 查看是否加载成功 ```shell php --ri sdebug ``` 别走,还没完,还需要一些其他的配置,不然你去断点会发现不起作用 我们还需要在 php.ini 中加入这几个配置项 ```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 ```php //创建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 ```php $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(1000, 9999)."</h1>"); }); $http->start(); ``` 这里需要在访问时加上一个`XDEBUG_SESSION_START`参数或者在 Cookie 中添加也可以 浏览器访问`http://127.0.0.1:9501/?XDEBUG_SESSION_START=xdebug` 也是可以断点调试的  框架的使用也是同理的,至于其他的什么和 docker 一起使用等等自己研究吧... 这里放一张调试 Hyperf 的截图  还有一个 Tips,把右上角的电话图标选择为上图那样,会在命令行启动服务时自动调起 Debug 服务
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
还没有评论!
微信公众号
热门内容
作者其它话题
- thinkphp5.1在使用think-swoole的时候报错unsupported option [host]
- WSL 下服务器响应数据过大无法接收
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。