eclipse 使用qemu的代码覆盖率

puruo6ea  于 2022-11-04  发布在  Eclipse
关注(0)|答案(2)|浏览(212)

我最近开始使用qemu,当你没有运行固件所需的硬件时,它是一个很好的工具(目前在cortex-m3上使用它)。
现在我想做的是用它做一些测试覆盖率。我试着用GNUC ARM Eclipse,我已经成功地在qemu中编译和执行代码,但是每当我添加-fprofile-arcs -ftest-coverage标志时(对于项目,然后对于所需的文件运行覆盖率)我能够创建.gcno文件,这意味着在执行我的代码之后,它将生成一个.gcda文件,然后我应该能够看到覆盖率。
这就是一切出错的地方。我能够生成一个.gcda文件,但是每当我试图打开其中任何一个文件时,eclipse告诉我它不能打开这个文件,因为它是空的。我试着在另一台计算机上复制这个过程,但是我没有成功创建gcda文件(可能是不同的二进制文件)。
在这一点上,我真的不知道如何继续。我应该放弃ARM Eclipse并坚持使用makefile(是否有可能以这种方式运行gcov?)还是我遗漏了一些非常小的可以修复的东西?
PS:我用的是64位的windows 7,GNU ARM Eclipse网站上提供的最新版本。另外,我刚刚想到通过makefile来做这个(那天压力很大,时间很晚了),所以我还没有试过,我只试过执行代码,但是没有覆盖。

pbossiut

pbossiut1#

据我所知,qemu还不能生成DWARF信息,但是有一个项目提出了用qemu进行代码覆盖的建议:Couverture Project

cunj1qz1

cunj1qz12#

当你使用qemu作为一个用户空间模拟器时(也可以参考qemu documentation),你实际上可以像往常一样测量代码覆盖率,在这种模式下,qemu拥有对主机文件系统的完全访问权限。
对于CMake项目,您可以简单地使用测试可执行文件的CROSSCOMPILING_EMULATOR属性,例如:

if(CMAKE_CROSSCOMPILING)
    set_target_properties(mytest
        PROPERTIES
            CROSSCOMPILING_EMULATOR "qemu-${CMAKE_SYSTEM_PROCESSOR};-L;$ENV{SDKTARGETSYSROOT}"
    )
endif()

有了这个设置,ctest将使用qemu来运行测试,并将.gcda文件写入构建目录中的常用位置。

相关问题