0

我有以下 AOSP 项目设置

1)我在(AOSP根目录)/vendor/myProject/test.cpp中有test.cpp

2) 在 Android.mk 中,我使用了 LOCAL_CFLAGS += -g -fprofile-arcs -ftest-coverage LOCAL_LDFLAGS += -lgcov

3)当我编译代码时,我得到 test.gcno 在:(AOSP 根目录)/out/target/product/generic/obj/EXECUTABLES/myProject_intermediates

4)然后我在设备上进行测试(adb sync)

5)然后在设备上我使用了以下内容: export GCOV_PREFIX=/vendor
export GCOV_PREFIX_STRIP=13 (去除不必要的路径)

6)我运行测试 ./system/bin/test 并在设备(shell)/vendor/test.gcda 上获得 test.gcda 文件

7)我将 test.gcda(从设备)复制到我已经有 test.gcno 的构建目录(/out/target/product/generic/obj/EXECUTABLES/myProject_intermediates)

8)现在我在 /out/target/product/generic/obj/EXECUTABLES/myProject_intermediates 然后运行 ​​gcov 如下:

(AOSP根目录)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcov test

为此,我得到如下输出:

文件 'vendor/myProject/test.cpp' 执行的行数:23.00% of 223

供应商/myProject/test.cpp:创建“test.cpp.gcov”

vendor/myProject/test.cpp: 无法打开源文件

任何人都可以帮助我解决这个问题。它说test.cpp:cannot open source file gcov 没有生成完整的报告。我还通过指定源路径来检查 -b 选项,如下所示:

(AOSP根目录)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcov -b (AOSP根目录)/vendor/myProject test

它没有用。

我猜这个问题是因为不同目录中的分布式文件(gcno,gcda,test.cpp)。

谢谢

4

2 回答 2

2

解决方案是在构建测试时所在的目录,稍后运行 gcov 时应该在同一目录中,然后.gcov将成功创建所有文件。

例如:

项目目录:android/frameworks/Myproj
在这个你有test.cppAndroid.mk

然后假设从 android 目录中构建appor test.cpp,即android$

然后*.gcno文件将出现在android/out/Myproj_Intermediates/

您将通过在设备中*.gcda运行来获取文件app,您将把*.gcda文件从设备带到文件夹android/out/Myproj_intermediates/

现在运行gcov这些:

您应该在 android 目录中(因为您从那里构建了应用程序)

android$ ./prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-gcov \ -o out/Myproj_intermediates/ -a frameworks/Myproj/test.cpp -b -c

于 2013-07-13T08:59:00.210 回答
0

几个月来,AOSP 已经有了更好的方法。

  1. 添加LOCAL_NATIVE_COVERAGE := true到您的生成文件中。
  2. $ export NATIVE_COVERAGE := true
  3. 构建、同步、运行。
  4. $ acov

acov将从设备中提取所有覆盖文件,将它们放在正确的位置,并且lcov(如果您还没有,iirc 这将提示您安装),并为您生成 HTML 报告。

于 2015-01-23T22:25:58.690 回答