当前位置:首页>自动驾驶>CARLA 原生 ROS2 实战:为自动驾驶做好最后一步

CARLA 原生 ROS2 实战:为自动驾驶做好最后一步

  • 2026-06-24 00:43:24
CARLA 原生 ROS2 实战:为自动驾驶做好最后一步

▶ CARLA · Autoware · Native ROS2

CARLA 原生 ROS2 实战

为自动驾驶做好最后一步

2026-06-19

前言

CARLA 原生 ROS2:从 FastDDS 到多中间件架构

上一篇我们回顾了 CARLA 原生 ROS2 从 FastDDS 到 CycloneDDS 的演进历程。不依赖 ROS2(rclcpp、rclpy)、直接在 UE4 进程内调用 DDS C API 的设计确实巧妙,但真正把这套系统跑起来,踩的坑比预想的多得多。

这篇文章记录四个实战中遇到的问题(车辆控制失效、状态数据缺失、TF 冲突、内存泄漏),以及最终怎么用一个集成脚本为自动驾驶做好最后一步。其中有些是本地自行设计修复的,有些是直接引用上游社区 PR。

来源说明:

章节
来源
说明
一、 订阅器修复
本地设计
自行定位问题并实现修复
二、补齐车辆状态话题发布
直接引用上游 PR
cherry-pick 自 JArmandoAnaya,未做修改
三、TF 发布开关
本地设计
自行设计并实现
四、内存泄漏
直接引用上游
backport 自 ue5-dev #8098,本地微调
五、集成落地
本地设计
整合 manual_control_ros2.py + autoware_carla_vehicle_interface

一、ROS2 节点 向 CARLA 发送车辆控制命令,车辆不动:CycloneDDS 订阅器的致命缺陷

现象

CARLA 以 --ros2 --rmw=cyclonedds 启动后,传感器数据一切正常——LiDAR 点云、RGB 图像、GNSS、IMU 都在 ros2 topic echo 中正常输出。Autoware 端也能顺利接收这些数据。

问题出在反向:从 Autoware 向 CARLA 发送车辆控制命令时,车辆纹丝不动。

bash
# 这条命令发出去了,但 CARLA 完全没反应 
ros2 topic pub --rate 10 /carla/hero/vehicle_control_cmd \   carla_msgs/msg/CarlaEgoVehicleControl \   "{throttle: 0.5, steer: 0.0, brake: 0.0, reverse: false}"

用 ros2 topic info 查看,订阅端确实存在(Subscription count: 1),但节点名是 _CREATED_BY_BARE_DDS_APP_——这说明 CARLA 用的是裸 DDS,不是标准的 rclcpp。

CARLA 服务端日志里反复刷着一条错误:

ERROR: carla_cdr_from_ser: fragmented receive is not supported; data will be invalid

根因

CARLA 的 CycloneDDS 后端使用自定义 ddsi_sertype 做原始 CDR 字节透传,完全绕过 CycloneDDS 的标准类型系统。这套自定义类型需要实现 ddsi_serdata_ops 表中的 15 个回调函数(eqkey、get_size、from_ser、from_ser_iov、from_keyhash、from_sample、to_ser、to_ser_ref、to_ser_unref、to_sample、to_untyped、untyped_to_sample、free、print、get_keyhash),其中关键的两个是数据接收路径:

回调
触发场景
原始状态
from_ser_iov
同进程 IPC(scatter-gather)
正常工作
from_ser
跨进程 DDS 通信(fragchain 分片)
返回零数据

关键区别:CARLA 自己发布的传感器数据,发布端和订阅端都在同一个 UE4 进程内,走 from_ser_iov 路径,所以传感器数据一直正常。但外部 ROS2 节点发布的控制命令,数据从另一个进程通过 DDS 网络层传过来,CycloneDDS 调用的是 from_ser 路径。

PR #9644(实现 CycloneDDS CDR 中间件的那个 PR)对 from_ser 的处理是直接 log_error 然后返回零填充数据。代码注释写道:"CARLA uses local IPC so this should never be triggered in practice"——这个假设在 CARLA 只做传感器发布时是对的,但一旦需要接收外部控制命令就彻底错了。

解决思路

CycloneDDS 的网络层会将大消息拆成多个 RTPS fragment,通过 nn_rdata 链表传递给 sertype 的 from_ser 回调。每个节点记录了该片段在完整消息中的字节范围。

修复的核心就是实现 from_ser:分配 serdata 缓冲区,遍历 fragchain 链表,用 NN_RMSG_PAYLOAD 和 NN_RDATA_PAYLOAD_OFF 宏获取每个片段的实际数据地址,按 min/maxp1 偏移 memcpy 到目标缓冲区。

涉及的 CycloneDDS 内部 API(NN_RMSG_PAYLOADNN_RDATA_PAYLOAD_OFFnn_rdata 结构)来自  头文件,需要额外引入。

改动不大——实现一个函数、加一行 include——但定位这个问题花了很长时间。因为传感器数据一直正常,最初怀疑的是 Autoware 端的 QoS 配置、消息类型匹配、甚至 CARLA 的 Python 控制脚本,直到看到 fragmented receive 这条日志才锁定方向。

相关链接

链接
说明
状态
#9644
CycloneDDS CDR 中间件实现(引入此 bug)
Merged
#9294
Carla 0.9.16 ROS2 Native: support alternative DDS implementations
已通过 PR 系列解决
#9500
vehicle_control_cmd 订阅器无法创建(FastDDS + UE5 场景,根因类似但环境不同)
Open
#9762
将 DDS 解耦移植到 ue5-dev
Open

二、补齐车辆状态话题发布:直接引用 PR #9787

本节内容直接引用上游 PR #9787(贡献者 JArmandoAnaya),未做任何修改。PR 截至 2026-06-18 尚未合并到上游 ue4-dev,我们通过 cherry-pick 提前引入。

背景

CARLA 原生 ROS2 之前只有传感器发布(CARLA→ROS2)和控制订阅(ROS2→CARLA)。但对于自动驾驶算法来说,还需要知道车辆自身的状态——当前速度、加速度、姿态、控制输入,以及车辆的物理参数(轮距、质量、最大刹车扭矩等)。没有这些数据,Autoware 的状态估计和控制诊断模块就缺了输入。

PR 整合内容

PR #9787(贡献者 JArmandoAnaya)补齐了这块能力,新增了以下 ROS2 话题:

话题
消息类型
发布频率
QoS
/carla//odometrynav_msgs/Odometry
每帧
Reliable, KeepLast(1)
/carla//vehicle_statuscarla_msgs/CarlaEgoVehicleStatus
每帧
Reliable, KeepLast(1)
/carla//vehicle_infocarla_msgs/CarlaEgoVehicleInfo
注册时一次
TransientLocal (latched)
/carla/mapstd_msgs/String
 (OpenDRIVE)
地图加载时
TransientLocal (latched)

Odometry

每帧发布 nav_msgs/Odometry,包含车辆在 odom 坐标系下的位姿和车体坐标系下的线速度/角速度。关键的坐标转换:UE 是左手系,需要 y 取反转右手系;速度从世界坐标投影到车体坐标(点积 forward/right/up 轴);角度从度转弧度。

Vehicle Status

每帧发布车辆的标量速度、加速度(从前后帧速度差分计算,第一帧为零)、姿态四元数,以及当前控制输入的回显。

Vehicle Info

车辆注册时发布一次,使用 TransientLocal QoS(latched),后加入的订阅者也能收到。包含车辆 ID、类型、角色名、各轮参数(摩擦系数、阻尼率、最大转向角、半径、刹车扭矩、位置)、以及物理参数(最大 RPM、转动惯量、质量、阻力系数、质心位置)。

TF 树

按照 REP-105 规范构建:map → odom(静态 identity,latched)+ odom → (每帧动态更新)。

UE4 侧集成思路

PR 在 UE4 侧有两个集成点:

车辆注册时ActorDispatcher::RegisterActor()):获取车辆物理控制参数(GetPhysicsControl),调用 ROS2::ProcessVehicleInfo() 发布 latched 的 VehicleInfo

每帧 tick 时CarlaEngine::OnPostTick()):遍历 Actor Registry 中的所有车辆,收集 transform、velocity、angular_velocity、control,调用 ROS2::ProcessDataFromVehicle() 发布 odometry + status + TF

PR 规模较大(58 个文件,3900+ 行新增),因为需要新增 4 个 Publisher 类、5 个 POD 消息类型、坐标转换工具函数、CDR 序列化/反序列化、类型元信息(type_name + type_hash)、以及 UE4 侧的集成代码。

配套修复:CDR 序列长度守卫

PR 还修复了一个潜在的 CDR 序列化 bug:PointCloud2::fieldsTFMessage::transformsCarlaEgoVehicleInfo::wheels 等序列的长度字段直接从 container.size() cast 到 uint32_t,理论上可能溢出产生畸形数据流。新增了 serialize_cdr_sequence_length() 辅助函数,写入前检查是否超过上限(2^20),超过则抛异常,与读取端的守卫对齐。

三、TF 发布开关:避免与下游 TF 树冲突

问题

CARLA 原生 ROS2 默认每帧发布 /tf(动态变换)和 /tf_static(静态变换),构建 map→odom→base_link 的完整 TF 链。PR #9787 也沿用了这个设计。

但问题是:Autoware 自己维护 TF 树。Autoware 的 EKFLocalizer 以 50Hz 发布 map→base_link,NDTScanMatcher 发布 map→ndt_base_link——这些都是硬编码在源码中的 sendTransform() 调用,没有参数可以关闭。

如果 CARLA 和 Autoware 同时发布 map→base_link,tf2 的"Latest Authority"策略会让两个源交替覆盖同一个变换。EKF 以 50Hz 发布,CARLA 以仿真帧率发布,频率不同,TF 树会在两个不同值之间剧烈抖动。下游节点查询到的位姿就会跳变,定位、规划、控制全部受影响。

这不是带宽问题,而是同一个 frame pair 被两个发布者写入的冲突问题。在 Autoware 接管定位的场景下,CARLA 不应该发布 TF。

解决思路

在 EpisodeSettings 中新增 ros2_publish_tf 布尔设置项,通过 Python API 暴露,默认关闭。

ROS2 单例内部维护 _publish_tf 标志。所有 TF 发布的入口(RegisterVehicle 中的静态 TF、ProcessDataFromVehicle 中的动态 TF)都检查这个标志。SetPublishTF(false) 时还会清理已有的 TF publisher 和静态 TF publisher,释放资源。

python
settings = carla.WorldSettings(ros2_publish_tf=True)  # 按需开启 world.apply_settings(settings)

这个设置是仿真回合级参数的,可以在运行时动态切换。关闭后,TF 树完全由下游(Autoware)维护,避免同一 frame pair 的双重发布冲突。

四、内存泄漏

来源:直接 backport 自 ue5-dev #8098(提交 239b73e84),本地做了少量微调#8098 原始场景是 save_to_disk 时内存暴涨,其修复(移除 boost::asio::post 包裹)同时解决了 WriteMessage 中 self 引用不释放的问题。

现象

 CARLA 长时间运行(尤其是同步模式下高频 tick)时,CarlaUE4 进程的 RSS 随时间线性增长,最终可能吃掉数 GB 内存。

根因 

ServerSession::WriteMessage() 中 boost::asio::post(_strand, [=]() { ... }) 包裹的 lambda 用 [=] 按值捕获了 shared_from_this()(即 self)。post 把这个 lambda 排到 strand 上执行,strand 持有 lambda,lambda 持有 self,形成引用循环——io_context 在 CARLA 运行期间一直存在,所以引用永远不会释放:

ServerSession (shared_ptr) → lambda 捕获 self → io_context 持有 lambda → 不释放

此外,CloseNow() 中刚被 PR #9740 加入的 _is_closed.exchange(true) double-close 守卫与修复方案冲突——修复需要让 async handler 能正常退出并释放引用,守卫反而阻止了这条路径。

解决

去掉 boost::asio::post 的 lambda 包裹,改用 boost::asio::bind_executor(_strand, handle_sent) 把 strand 绑定到 handler,让 handler 直接传给 async_write。同时移除 CloseNow() 中的 double-close 守卫——_is_closed 成员变为死代码。本地在 backport 基础上做了少量微调(deadline timer 初始化方式、忙等从 sleep_for 改为 yield)。

五、集成落地:一个脚本为自动驾驶做好最后一步

四个问题修完,路通了。但 CARLA 自带的两个示例脚本各管一半:

• manual_control.py——pygame 键盘控制 + HUD 仪表盘,不涉及 ROS2

• ros2_native.py——读 JSON 配置生成传感器、调 enable_for_ros() 激活 ROS2 发布,没有键盘控制,没有画面

集成脚本

通过一个脚本实现自动驾驶仿真的完整前端,包括自动驾驶第三视角监视、手动与自动驾驶双模式控制,原生ROS2启动与数据接收发布等等。

整体上就是把 ros2_native.py 的传感器配置搬进 manual_control.py,然后完善功能:

改动
说明
传感器配置
从 JSON 读取,spawn 时设 ros_name/frame_id,调 enable_for_ros()
控制模式切换
按 E 切 ROS2 Auto,键盘手动模式失效,车辆由外部 ROS2 话题控制。
手动模式下增加一个PID控制模式,(建图)人工操作起来更加顺手。
TF 开关
--ros2-tf
 控制是否发布 TF,默认不发(避免与 Autoware 冲突)
同步模式
--ros2
控制是否发布ROS2数据源,同时自动启用同步模式,固定步长控制帧率

不传 --ros2,就是普通的 manual_control.py。加上 --ros2 -f stack.json,就是 Autoware 仿真的完整前端。

总结

别让仿真成“假把式”-CARLA自定义环境让算法真正落地

Carla 自定义车辆快速上手指南

从 OSM 到 CARLA:孪生之路

从 Lanelet2 到 CARLA:孪生之路

CARLA 原生 ROS2:从 FastDDS 到多中间件架构

已关注
关注
重播 分享

至此,基于Carla来打造一个完全自定义的自动驾驶仿真环境的任务就算完成了。🎉

▶文章时效说明:

本文记录的是截至 2026 年 6 月的实况。上述 PR 和 issue 在 GitHub 上持续演进,部分问题可能已被上游修复或有了更优方案,建议读者以最新代码为准。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-24 03:11:56 HTTP/2.0 GET : https://e.mffb.com.cn/a/521447.html
  2. 运行时间 : 0.111855s [ 吞吐率:8.94req/s ] 内存消耗:4,430.55kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6052e7bedbfe19a293288c52fcf4b846
  1. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/runtime/temp/600e51726691ba7063b44bb89d9aaaff.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/e.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000522s ] mysql:host=127.0.0.1;port=3306;dbname=e_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000889s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003438s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000269s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000508s ]
  6. SELECT * FROM `set` [ RunTime:0.000202s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000544s ]
  8. SELECT * FROM `article` WHERE `id` = 521447 LIMIT 1 [ RunTime:0.000771s ]
  9. UPDATE `article` SET `lasttime` = 1782241916 WHERE `id` = 521447 [ RunTime:0.017837s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000352s ]
  11. SELECT * FROM `article` WHERE `id` < 521447 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000512s ]
  12. SELECT * FROM `article` WHERE `id` > 521447 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000928s ]
  13. SELECT * FROM `article` WHERE `id` < 521447 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004879s ]
  14. SELECT * FROM `article` WHERE `id` < 521447 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002490s ]
  15. SELECT * FROM `article` WHERE `id` < 521447 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.010189s ]
0.113440s