我有以下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)。
谢谢
解决方案是在构建您所在目录的测试时,您应该在稍后运行gcov时位于同一目录中,然后将成功创建所有.gcov
文件。
例如:
项目目录:android/frameworks/Myproj
在这里你有test.cpp
和Android.mk
然后说从android目录假设你将构建app
或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
几个月来,AOSP有了一个更好的方法。
LOCAL_NATIVE_COVERAGE := true
添加到您的makefile中。$ export NATIVE_COVERAGE := true
$ acov
acov
将从设备中提取所有覆盖文件,将它们放在正确的位置,然后lcov
(如果您还没有它,则会提示您安装),并为您生成HTML报告。