在Android AOSP中使用gcov时无法打开源文件

问题描述 投票:0回答:2

我有以下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 导出GCOV_PREFIX_STRIP = 13(去掉不必要的路径)

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

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

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'执行的行:223的23.00%

vendor / myProject / test.cpp:创建'test.cpp.gcov'

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

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

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

它没用。

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

谢谢

android android-source gcov lcov test-coverage
2个回答
1
投票

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

例如:

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

然后说从android目录假设你将构建apptest.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


0
投票

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

  1. LOCAL_NATIVE_COVERAGE := true添加到您的makefile中。
  2. $ export NATIVE_COVERAGE := true
  3. 构建,同步,运行。
  4. $ acov

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

© www.soinside.com 2019 - 2024. All rights reserved.