Pan*_*kaj 6 android code-coverage gcov android-source android-soong
我正在尝试使用soong构建系统使用AOSP源代码为我的本机组件生成代码覆盖率报告.
我扩展了aosp vhal,但单元测试用例与下面的链接相同. http://androidxref.com/8.1.0_r33/xref/hardware/interfaces/automotive/vehicle/2.0/default/tests/
尝试将以下内容添加到Android.bp中的cc_test,cc_binary
native_coverage : true,
cflags: [
"-g",
"-O0",
"-fprofile-arcs",
"-ftest-coverage",
],
ldflags : [
"-fprofile-arcs",
"-ftest-coverage",
],
Run Code Online (Sandbox Code Playgroud)
本地二进制单元测试覆盖是在out/target/product中生成的,但我找不到gcno中间体.
在命令下运行会为每个测试文件提供*.gcda文件.
adb shell \
GCOV_PREFIX=/data/local/tmp \
GCOV_PREFIX_STRIP=`echo $ANDROID_BUILD_TOP | grep -o / | wc -l` \
/data/local/tmp/unit-tests-coverage
Run Code Online (Sandbox Code Playgroud)
我试过下面的链接,但不知道如何继续:(
http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/ https://android.googlesource.com/platform/bionic.git/+/master- soong https://android.googlesource.com/platform/build/soong/+/581341d%5E%21/ https://android.googlesource.com/platform/external/e2fsprogs/+/fedfb27%5E%21/ https : //android.googlesource.com/platform/development/+/master/scripts/acov#23 http://androidxref.com/9.0.0_r3/xref/bionic/README.md#293
我不确定谷歌的vts框架是否可用于生成本机代码覆盖. https://codelabs.developers.google.com/codelabs/android-vts-8/#6
生成" gcnodir "但不确定如何使用它./coverage/data/nativetest64/vehicle-unit-tests-coverage/unit-tests-coverage.gcnodir
在 SO 上为其他用户发布我的问题的答案。
安装覆盖工具:
sudo apt-get install lcov(这应该安装 lcov-1.12)sudo apt-get install gcc-4.6(Clang 生成大约等于 gcc 4.2 的 .gcno,但与 gcov-4.8 不兼容。安装 gcc-4.6 以获取 gcov-4.6 并使用 '--gcov-tool /usr/bin/gcov-4.6' 调用 lcov)所有本机单元测试用例(即检测的二进制文件)都需要在目标上执行。构建并发出 clang 的基于检测的分析。示例: http: //androidxref.com/9.0.0_r3/xref/hardware/interfaces/automotive/vehicle/2.0/default/Android.bp#82(更名为vehicle-manager-unit-test以简化名称)
native_coverage: true到Android.bp中的测试模块adb push out/target/product/product_name/data/nativetest64/vendor/vehicle-manager-unit-test /data/nativetest64/vehicle-manager-unit-test
adb shell chmod +x /data/nativetest64/vehicle-manager-unit-test
运行测试用例并生成 .gcda 文件
adb shell \
GCOV_PREFIX=/data/local/tmp \
GCOV_PREFIX_STRIP=echo $ANDROID_BUILD_TOP | grep -o / | wc -l \
/data/nativetest64/vehicle-manager-unit-test
adb shell find -iname *.gcda
adb pull /data/local/tmp/proc/self/cwd/out/soong/.intermediates/hardware/interfaces/automotive/vehicle/2.0/default/vehicle-manager-unit-test/android_x86_64_silvermont_vendor_cov/obj/hardware/interfaces/automotive/vehicle/2.0/default/tests/ .(Destination folder)
将 GCNO 文件从 GCNODIR (在 out/overage/data/nativetest64/vendor/vehicle-manager-unit-test 生成的存档文件)提取到与 GCDA 文件相同的文件夹
llvm-cov gcov -f -b *.gcda(https://llvm.org/docs/CommandGuide/llvm-cov.html )
lcov --directory . --base-directory . --gcov-tool /usr/bin/gcov-4.6 --capture -o cov.info(http://ltp.sourceforge.net/coverage/lcov.php)
genhtml cov.info -o output
这是包装所有这些命令的脚本:
https://gist.github.com/pankajgangwar/f070b8b54e83543f8e3638dcd2cae1b8
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |