【问题标题】:Qt and gcov, coverage files are not generatedQt和gcov,覆盖文件不生成
【发布时间】:2010-12-19 14:29:57
【问题描述】:

我正在尝试获取我为 Arora 浏览器编写的组件的代码覆盖率,该组件是使用 C++ 和 Qt 框架编写的。

我无法使用 gcov 程序,无论是在 Gnu/Linux 还是 Mac Os X 下。我尝试了我在 Internet 上可以找到的所有内容,还强制自动编辑由 .pro 文件生成的 Makefile。

有人可以帮帮我吗?这是我非常简单的专业文件:

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
LIBS += -lgcov
QMAKE_CXXFLAGS += -g -fprofile-arcs -ftest-coverage -O0
QMAKE_LDFLAGS += -g -fprofile-arcs -ftest-coverage  -O0


include(../autotests.pri)

# Input
SOURCES += tst_quickview.cpp
HEADERS +=

Makefile 确实包含标志。我还尝试了--coverage 选项。但什么也没有发生。当我运行可执行文件时,不会生成任何 gcov 文件。没有错误,也没有警告。我正在使用 QTestLib 框架。

谢谢

【问题讨论】:

  • 你能让 gcov 工作吗?你能否让它在一个独立于 Qt 的简单测试程序上运行,例如只使用命令行?
  • 我的意思是,简单的测试程序有效,而不是我正在研究的那个
  • 我成功地将 gcov/lcov 与 QTestLib 结合使用。您的 .pro 文件对我来说看起来不错 --- 关键部分在那里(-fprofile-arcs -ftest-coverage-lgcov)。您的测试代码是否正常退出?测量数据只写在atexit() 函数中。
  • 项目测试文件实际使用QTEST_MAIN(tst_QuickView)宏来生成main函数。这可能是问题吗?

标签: unit-testing qt qt4 code-coverage


【解决方案1】:

至少在我遇到类似问题的情况下,问题出在目录结构中。

第一个问题是/是为了在执行期间生成正确的 .gc* 文件,需要禁用编译器缓存。我从来没有真正调试过这个问题,但现在,我假设 gconv 文件实际上放置在编译器缓存文件夹中,并且在执行覆盖检测二进制文件期间,二进制文件无法识别应该在哪里生成新的数据文件。

第二个问题是/是我必须在编译时在 相同 目录结构中运行测试。例如,如果我在“/home/foo/src”中编译了应用程序/myproject/" 及其所有子目录.. 执行必须在同一个目录结构中进行,否则将不会生成数据文件..

【讨论】:

    【解决方案2】:

    至少你应该使用

    QMAKE_LFLAGS += -g -fprofile-arcs -ftest-coverage  -O0
    

    而不是

    QMAKE_LDFLAGS += -g -fprofile-arcs -ftest-coverage  -O0
    

    我不确定这是否能解决您的问题,但 QMAKE_LDFLAGS 不会做任何有用的事情。

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 2015-11-26
      • 2021-10-17
      • 2011-06-06
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多