【问题标题】:gcov can't open source file while using it in Android AOSPgcov 在 Android AOSP 中使用时无法打开源文件
【发布时间】:2013-06-21 01:55:50
【问题描述】:

我有以下 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 同步)

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

6) 我运行测试 ./system/bin/test 并获得 test.gcda 文件 设备(外壳)/vendor/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 测试

为此,我得到如下输出:

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

vendor/myProject/test.cpp:creating '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 测试

没用。

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

谢谢

【问题讨论】:

    标签: android android-source gcov lcov test-coverage


    【解决方案1】:

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

    例如:

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

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

    那么*.gcno文件将出现在android/out/Myproj_Intermediates/

    您将通过在设备中运行app 获得*.gcda 文件,您会将*.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

    【讨论】:

    • 注意:我在将 .gcda 文件从不同目录而不是从 android 引入之后运行 gcov ......所以我得到“无法打开源文件”也从“中间体”文件夹运行不这样做..**仅从您构建应用程序的目录(例如:android)* 运行 gcov 工作
    • @user2438949 : gcov 成功后是否可以使用 lcov。我得到了 geninfo: ERROR: GCOV failed for /home/user/AOSP/JB_emulatorBuild/out/target/product/generic/obj/EXECUTABLES/my_project_intermediates/test_project.gcda!
    • 从运行 gcc 的同一目录运行 gcov 也适用于 CentOS linux(无移动操作系统)
    【解决方案2】:

    几个月来,AOSP 中出现了更好的方法。

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

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

    【讨论】:

    • Hey Dan.. 我正在尝试为 aosp 中的本机组件生成代码覆盖率。你能指点我一些带有示例或参考的git项目吗???
    • 试试android.googlesource.com/platform/bionic/+/master/… 之类的东西,但我认为这一切都是几年前的事。上次我试过了,还是不行。
    猜你喜欢
    • 2013-10-25
    • 2011-10-12
    • 1970-01-01
    • 2017-12-10
    • 2016-05-27
    • 2019-05-17
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多