当前位置: 首页 > news >正文

解析 Flutter OH 相关的cppcrash堆栈

本文介绍如何解析Flutter OpenHarmony化版本libflutter.so相关的崩溃堆栈。

1. 介绍

llvm-addr2line 工具是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。一般适用于带有 symbol 信息的so库。

2. 工具位置

DevEco StudioCommand Line Tools for OpenHarmony的sdk目录下有这个工具,对应路径如下:

  • Windows: sdk/default/openharmony/native/llvm/bin/llvm-addr2line.exe
  • Linux/Mac: sdk/default/openharmony/native/llvm/bin/llvm-addr2line

可以将 llvm-addr2line 所在目录配置到环境变量PATH里,如

exportPATH=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/llvm/bin:$PATH

3. 使用命令

llvm-addr2line-f-eso.unstripped/libflutter.so[addr1][addr2]

4. 如何获取带有 symbol 的 libflutter.so 文件

4.1 使用本地编译的engine产物
  • debug 版本
    • src/out/ohos_debug_unopt_arm64/so.unstripped/libflutter.so
  • release 版本
    • src/out/ohos_release_arm64/so.unstripped/libflutter.so
  • profile 版本
    • src/out/ohos_profile_arm64/so.unstripped/libflutter.so
4.2 在云端产物中下载
  • 在使用的flutter_flutter版本中,找到使用的flutter_engine版本的commitid。
    • 在文件flutter_flutter/bin/internal/engine.ohos.version中。
  • 根据commitid 8ef94277f0029e61ff6a96f630d0f10b60330cd8,下载对应版本 libflutter.so 的zip文件
    • debug 版本,https://flutter-ohos.obs.cn-south-1.myhuaweicloud.com/flutter_infra_release/flutter/8ef94277f0029e61ff6a96f630d0f10b60330cd8/ohos-arm64/symbols.zip
    • release 版本,https://flutter-ohos.obs.cn-south-1.myhuaweicloud.com/flutter_infra_release/flutter/8ef94277f0029e61ff6a96f630d0f10b60330cd8/ohos-arm64-release/symbols.zip
    • profile 版本,https://flutter-ohos.obs.cn-south-1.myhuaweicloud.com/flutter_infra_release/flutter/8ef94277f0029e61ff6a96f630d0f10b60330cd8/ohos-arm64-profile/symbols.zip

5. 使用示例

libflutter.so 相关的部分崩溃日志:

#00 pc 00000000001b5a34 /system/lib/ld-musl-aarch64.so.1(__timedwait_cp+188)(ef860a9c8bd64e964a4dd4ef838876e1) #01 pc 00000000001b7a3c /system/lib/ld-musl-aarch64.so.1(__pthread_cond_timedwait+188)(ef860a9c8bd64e964a4dd4ef838876e1) #02 pc 000000000021d450 /data/storage/el1/bundle/libs/arm64/libflutter.so(85c51e03a4f191b946582701e79e1be4a0c83959) #03 pc 00000000001f21f4 /data/storage/el1/bundle/libs/arm64/libflutter.so(85c51e03a4f191b946582701e79e1be4a0c83959)

获取带有 symbol 的文件so.unstripped/libflutter.so,可以将错误堆栈中的地址转换为具体的报错代码行数。

执行命令:

llvm-addr2line-f-eso.unstripped/libflutter.so 00000000001b5a34 00000000001b7a3c 000000000021d450 00000000001f21f4

解析后的结果:

_ZNSt21_LIBCPP_ABI_NAMESPACE21__libcpp_condvar_waitB6v15004EP14pthread_cond_tP15pthread_mutex_t /home/hazy/tools/ohos-v5.0.3.900/command-line-tools/sdk/default/openharmony/native/llvm/include/c++/v1/__threading_support:335 _ZN7flutter16PlatformViewOHOS13NotifyChangedERK7SkISize /home/hazy/work/engine_build/engine_daily/src/out/ohos_release_arm64/../../flutter/shell/platform/ohos/platform_view_ohos.cpp:192

其他

  • 分析CppCrash
  • flutter_flutter
  • flutter_engine
http://www.jsqmd.com/news/584144/

相关文章:

  • OpenClaw性能调优:千问3.5-35B-A3B-FP8响应速度提升30%实战
  • OpenClaw多任务测试:Qwen3.5-9B并行处理10个爬虫请求
  • STM32+ESP8266智能花卉大棚系统设计与实践
  • 技术断层终结者:低代码AI化打通数智化任督二脉
  • OpenClaw定时任务管理:Qwen2.5-VL-7B每日资讯自动汇总
  • 14 指挥AI写前端HTML/CSS/JS代码,实现页面布局与交互
  • OpenClaw故障排查大全:Qwen3.5-9B接口连接7类报错解决
  • Hutool工具包中`copyProperties`和`toBean`的性能对比与优化实践
  • OpenClaw+千问3.5-35B-A3B-FP8:智能相册自动分类方案
  • OpenClaw智能健身教练:千问3.5-35B-A3B-FP8分析训练动作截图提供纠正建议
  • 告别通知轰炸,手机自带功能实现一键批量管控
  • OpenClaw技能市场巡礼:Qwen3-14B支持的10个实用自动化模块
  • 一键导出OpenClaw日志:百川2-13B-4bits量化模型辅助分析工具
  • 3步彻底解决PCL2启动器Java环境配置难题
  • OpenLayers项目实战:用Vue 3 + 天地图WMTS服务,一步步搭建一个可切换图层的地图管理后台
  • OpenClaw学术助手:Kimi-VL-A3B-Thinking论文图表解析工作流
  • OpenClaw性能优化:Phi-3-vision-128k-instruct长图文处理技巧
  • OpenClaw浏览器插件开发:Qwen3-14b_int4_awq增强网页交互能力
  • 可同时提供数据中心专用接线端子、综合布线、供配电与监测控制一体化解决方案的品牌有哪些?——基于结构整合能力与技术路径一致性的定义研判
  • OpenClaw多模态扩展:Phi-3-mini-128k-instruct结合OCR处理图片
  • 告别OpenCV:在PyTorch 2.x中一站式搞定图像傅里叶变换与高低通滤波
  • 五大好用的汽修管理软件
  • 企业大模型技能中心(Skill Hub)的建设
  • navduino:面向嵌入式航电的轻量级Arduino导航库
  • 别再死磕八股文了!2026年程序员拿Offer的底层逻辑全在这里(建议收藏)
  • C++的std--ranges算法并行执行任务窃取算法与负载均衡在分布式
  • ESP8266 AT模式WiFi管理中间件:多AP切换与Web配置门户
  • OpenClaw飞书机器人实战:千问3.5-9B自动回复消息
  • 宏天CRM系统的消息中心:基于RabbitMQ的实践
  • 网站安全助手第2版(油猴脚本,AI制作,可做参考,仅供个人学习使用)