鸿蒙工程获取C/C++代码覆盖

整体参考 developer.huawei.com/consumer/cn...

构建方法

cmake 复制代码
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-instr-generate")

如果依赖第三方库

三方源码路径注意下,最好别放到工程外的路径(也可以使用静态链接方式)

cmake 复制代码
add_library(XXXX STATIC ${SRC_FILES})

或者放到third_party目录下

makefile 复制代码
entry/src/main/cpp/ 
├── CMakeLists.txt # 总控构建脚本 
├── build-profile.json5 
├── index.cpp # NAPI 桥接代码 
├── my_module/ # 你自己的业务逻辑 
│ ├── src/ 
│ └── include/ 
└── third_party/ # 【新增】第三方库源码目录 
    └── ThirdPartyLib/ # 假设这是解压后的源码 
    ├── CMakeLists.txt # (可选) 如果它自带 CMake 
    ├── src/ 
    │   ├── lib_core.cpp 
    │   └── ... 
    └── include/ 
    └── lib_core.h

由于hap在启动的后不会正常退出,导致覆盖率信息文件没有生成

cpp 复制代码
    char filename[256];
    snprintf(filename, sizeof(filename), "/data/storage/el2/base/c++_coverage.profraw"); // 覆盖率报告文件路径和文件名,不可修改
    __llvm_profile_set_filename(filename);

    ...

    __llvm_profile_write_file();

重点是__llvm_profile_write_file(); 需要在确认所有C++代码执行结束的地方粘贴。

查看代码覆盖率

由于hap是在沙箱机制运行,/data/storage/el2/base/c++_coverage.profraw实际对应的路径是 /data/app/el2/100/base/com.xxxx.xxxx 目录下生成c++_coverage.profraw

shell 复制代码
hdc file recv /data/app/el2/100/base/com.xxxx.xxxx/c++_coverage.profraw

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

llvm-profdata merge -spare  --output=cov.profdata c++_coverage.profraw
llvm-cov show <your_path>/libentry.so -instr-profile=cov.profdata -format=html -output-dir=report_folder

如果想换成lcov的

shell 复制代码
llvm-cov export -format=lcov -instr-profile=coverage.profdata <your_path>/libentry.so > coverage.info
genhtml -o cov_dir coverage.info --ignore-errors inconsistent --ignore-errors corrupt
相关推荐
tyqtyq221 小时前
营养餐单规划:AI 科学饮食规划系统的鸿蒙实现
人工智能·学习·华为·职场和发展·生活·harmonyos
不才难以繁此生1 小时前
HarmonyOS RDB 索引实战:中式美食搜索和购物清单查询怎么避免扫全表
harmonyos·arkts·arkui·rdb·中式美食·relationalstore
星释2 小时前
鸿蒙智能体开发实战:26.Skill 与插件协同开发
microsoft·华为·ai·harmonyos·鸿蒙·智能体
星释2 小时前
鸿蒙智能体开发实战:32.鸿蒙壁纸大师 - API认证与会话管理
华为·ai·harmonyos·智能体
花开彼岸天~2 小时前
鸿蒙实战:导航栏与顶部栏设计规范 HmTitleBar
华为·harmonyos·鸿蒙系统·设计规范
星释2 小时前
鸿蒙智能体开发实战:33.鸿蒙壁纸大师 - 多轮交互工作流设计
华为·交互·harmonyos·鸿蒙
ZZZMMM.zip3 小时前
口碑逆转术-用户评论分析的HarmonyOS开发实践
人工智能·华为·harmonyos·鸿蒙·鸿蒙系统
●VON3 小时前
HarmonyKit | 鸿蒙新特性:router 导航 API 从 pushUrl 到 UIContext 的演进
算法·华为·交互·harmonyos
星释3 小时前
鸿蒙智能体开发实战:31.鸿蒙壁纸大师 - 环境搭建与基础配置
算法·华为·ai·harmonyos·鸿蒙
Helen_cai3 小时前
OpenHarmony 相册图片选择封装全场景开发(API Version23 + 适配版)
华为·harmonyos