ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Flutter OH 日志抓取与过滤指南

Flutter OH 日志抓取与过滤指南 返回 Flutter OH平台 DFX 问题定位导航1. 三套日志体系日志从哪里来Flutter OHOS 平台的日志来自三个不同的源头就像一栋楼有三个楼层每个楼层的人说话你都需要不同的方式去听日志来源Tag标签谁产生的典型内容什么时候看引擎内部映射到 HiLogFlutter 引擎的 C 代码崩溃堆栈、卡死检测、GPU 回收排查崩溃、卡死、黑屏平台 C 层XComFlutterOHOS_NativeOHOS 平台的 C 代码引擎初始化、NAPI 调用排查引擎初始化问题ETS 嵌入层FlutterArkTS 代码MethodChannel、插件异常、生命周期排查插件/通道问题新手提示不确定看哪个用这条命令看全部 Flutter 日志hdc shell hilog|grep-EFlutter|XComFlutter|flutter2. 日志抓取方法2.1 基本流程按这 4 步操作就行# 1. 清空历史日志清掉旧的只留复现后的新日志hdc shell hilog-r# 2. 复现问题操作你的应用触发 bug# 3. 抓取日志按 CtrlC 停止抓取hdc shell hilogflutter_log.txt# 4. 从日志中筛选 Flutter 相关的内容hdc shell hilog|grep-EFlutter|XComFlutter|flutterflutter_filtered.txt新手提示hilog就是 OHOS 的日志系统类似 Android 的logcatgrep是文本搜索工具-E表示用正则表达式匹配表示把输出保存到文件2.2 实时监控日志边操作边看日志# 实时看全部 Flutter 日志hdc shell hilog|grep-EFlutter|XComFlutter|flutter# 实时看崩溃日志hdc shell hilog|grep-ECaught signal|Unhandled exception|FLUTTER_# 实时看卡死日志hdc shell hilog|grep-EFlutterWatchdog|not alive|HiCollie# 实时看 GPU 回收日志hdc shell hilog|grep-EGpuReclaim|Surface# 实时看外接纹理日志hdc shell hilog|grep-Eexternal_texture|NativeImage|texture_id2.3 抓取到设备文件再拉到电脑# 把日志保存到设备文件hdc shellhilog /data/local/tmp/flutter_log.txt# 拉取到电脑hdcfilerecv /data/local/tmp/flutter_log.txt ./flutter_log.txt2.4 抓取崩溃日志tombstoneNative 崩溃时系统会生成 tombstone 文件比 hilog 更详细# 查看崩溃日志文件hdc shellls/data/log/faultlog/# 拉取到电脑hdcfilerecv /data/log/faultlog/faultlog-xxx ./faultlog.txt2.5 抓取卡死日志APP_FREEZEUI 线程卡死 6 秒时系统生成 APP_FREEZE 事件hdc shellls/data/log/faultlog/ hdcfilerecv /data/log/faultlog/appfreeze-xxx ./appfreeze.txt3. 日志过滤方法3.1 按问题类型过滤最常用不知道用哪条对照你的现象选问题类型过滤命令崩溃应用闪退hdc shell hilog | grep -E Caught signal|Unhandled exception|FLUTTER_DART_EXCEPTION|FLUTTER_ETS_EXCEPTION卡死无响应hdc shell hilog | grep -E FlutterWatchdog|not alive|HiCollie|THREAD_STUCK|APP_FREEZE卡顿/丢帧hdc shell hilog | grep -E JANK|jank|missed|frame内存OOMhdc shell hilog | grep -E heap memory|memory|OOM|thresholdGPU黑屏hdc shell hilog | grep -E GpuReclaim|SurfaceVsynchdc shell hilog | grep -E vsync|Vsync|Poll error外接纹理hdc shell hilog | grep -E external_texture|NativeImage|texture_id|frame gate引擎生命周期hdc shell hilog | grep -E FLUTTER_ENGINE_CREATE|FLUTTER_ENGINE_DESTROY平台通道hdc shell hilog | grep -E handlePlatformMessage|MethodChannel|Failed to handle3.2 按 Tag 过滤# 只看引擎 C 日志hdc shell hilog-TXComFlutterOHOS_Native# 只看 ArkTS 日志hdc shell hilog-TFlutter3.3 按级别过滤hdc shell hilog-bD# 全部日志Debug 及以上hdc shell hilog-bI# 只看 Info 及以上hdc shell hilog-bW# 只看 Warn 及以上hdc shell hilog-bE# 只看 Error 及以上3.4 组合过滤技巧# 搜索多个关键词OR 关系hdc shell hilog|grep-EGpuReclaim|frame gate|Surface REBUILT# 排除噪音NOT 关系hdc shell hilog|grep-EFlutter|grep-vflutter::# 只看某个时间段hdc shell hilog|grep08-03 10:3[0-5]# 10:30-10:35 的日志# 统计关键词出现次数hdc shell hilog|grep-cis not alive# 卡死了几次4. 日志级别说明4.1 不同级别的含义级别数值通俗理解什么时候看DEBUG3最详细的调试信息开发调试时INFO4关键流程节点确认流程是否正常WARN5警告可恢复的问题检查潜在问题ERROR6错误功能失败排查问题FATAL7致命不可恢复必须修复新手提示排查问题时建议开启 DEBUG 级别hdc shell hilog -b D4.2 Release 模式下 ETS 日志看不到Release/Profile 模式默认只输出 WARN 及以上。如果需要看更详细的日志importLogfromohos.flutter.ohos/src/main/ets/util/Log;Log.setLogLevel(HiLog.LogLevel.DEBUG);5. HiTrace 抓取分析卡顿专用5.1 什么是 HiTraceHiTrace 是性能追踪工具记录每一帧的耗时。类似 Chrome DevTools 的 Performance 录制。5.2 抓取方法# 抓取 10 秒的 Trace在这 10 秒内复现问题hdc shell hitrace--trace_clockboottime-t10flutter-o/data/local/tmp/trace.ftrace# 拉取到电脑hdcfilerecv /data/local/tmp/trace.ftrace ./trace.ftrace# 用 Chrome 打开访问 chrome://tracing → 点 Load → 选文件5.3 同时抓取多个类别# Flutter 调度信息分析线程阻塞hdc shell hitrace--trace_clockboottime-t30flutter sched-o/data/local/tmp/trace.ftrace5.4 Trace 里搜索什么搜索关键词看什么正常表现flutter::Frame每一帧的耗时16msFlutter Lost Frames丢帧计数值为 0Flutter Hitch Time丢帧详情不出现feedFlutterWatchdogUI 线程心跳每 3 秒一次feedFlutterRasterWatchdogRaster 线程心跳每 3 秒一次快捷键w放大、s缩小、a左移、d右移6. DFX 关键日志一览6.1 崩溃相关搜索这个关键字含义严重程度Caught signal SIGSEGV引擎访问了非法内存致命Caught signal SIGABRT引擎断言失败/堆破坏致命Unhandled exceptionDart 代码有未捕获异常致命Failed to handle method callETS 插件异常中6.2 卡死相关搜索这个关键字含义严重程度is not alive某个线程卡死了致命m_is_six_second_event false卡死 3 秒第一阶段严重m_is_six_second_event true卡死 6 秒第二阶段可能弹窗致命thread may be blocked, do not report防误报跳过正常—6.3 内存/GPU 相关搜索这个关键字含义严重程度Dart heap memory usage exceeds thresholdDart 内存超 1.5GB高GpuReclaimkAggressiveGPU 资源被回收正常退后台时GpuReclaimkRestoreGPU 资源恢复正常回前台时Surface REBUILTSurface 重建成功正常SetDisplayWindow failedSurface 重建失败异常6.4 外接纹理相关搜索这个关键字含义严重程度No DlImage available无可绘制画面黑屏中frame gate enabled后台帧闸门开启正常skip one frame(slow consumer)消费过慢跳帧中PlatformViewVisibleAreaEventCallback可见区域变化—6.5 Vsync 相关搜索这个关键字含义严重程度vsync_handle_ is nullptrVsync 句柄无效致命AwaitVSync...failedVsync 请求失败致命Failed to dlopen libnative_vsync.soVsync 库加载失败致命7. 常见问题Q1: 抓不到 Flutter 日志原因解决方法日志级别没开hdc shell hilog -b Dhilog 服务没运行hdc shell hilog -v查状态hdc shell hilog -r清空重试设备没连接hdc list targets确认设备Q2: Release 模式看不到详细日志// 在应用入口设置日志级别Log.setLogLevel(HiLog.LogLevel.DEBUG);Q3: HiAppEvent 事件在哪里看# 方法 1搜索上报日志hdc shell hilog|grepOH_HiAppEvent_Write# 方法 2搜索特定事件hdc shell hilog|grep-EFLUTTER_DART_EXCEPTION|OTHER_JANK|FLUTTER_STABILITY_EVENT# 方法 3查看 faultlog 目录hdc shellls/data/log/faultlog/Q4: Trace 文件怎么分析Chrome 浏览器访问chrome://tracing点Load加载.ftrace文件搜索flutter::看帧耗时搜索Flutter Lost Frames看丢帧快捷键w放大、s缩小Q5: 日志太多看不过来# 按问题类型过滤见 §3.1hdc shell hilog|grep-ECaught signal|Unhandled exception# 排除噪音hdc shell hilog|grep-EFlutter|grep-vflutter::# 按时间段过滤hdc shell hilog|grep08-03 10:3[0-5]# 保存到文件后离线分析hdc shell hilogflutter_log.txtQ6: HiAppEvent 事件上报失败错误日志含义解决方法API version too low系统 API 太低需 API 18reportFrameworkMemAnomaly_ is nullptr内存上报 API 不足需 API 26flush isValid_ falseHiAppEvent 没初始化检查 SO 库加载Q7: 怎么确认日志属于哪个线程搜索关键词对应线程FlutterUiThread/feedFlutterWatchdogUI 线程FlutterRasterThread/feedFlutterRasterWatchdogRaster 线程FlutterPlatformThread/feedFlutterPlatformWatchdogPlatform 线程
返回列表