【问题标题】:How to use gcov with gcc without the optimization?如何在没有优化的情况下将 gcov 与 gcc 一起使用?
【发布时间】:2012-08-24 17:55:55
【问题描述】:

我有这样的测试代码:

int diff21(int n)
{
    if (n <= 21)
    {
        return 21 - n;
    }
    else
    {
        return (n - 21) * 2;
    }
}

我添加了编译标志:-fprofile-arcs -ftest-coverage 以提供覆盖率数据。

我这样写测试代码:

CU_ASSERT(diff21(19) == 2);

我用lcov生成了一个html报告,它说else分支的return (n - 21) * 2被执行了,所以我得到了100%的行覆盖率。 这不是真的

我google了一下,发现是因为this --- gcc优化可以通过与其他行结合来消除一些简单的代码行,但是如果我不应该如何生成覆盖率数据使用-fprofile-arcs -ftest-coverage 标志?

顺便说一句,我正在使用 netbeans 和 cygwin 进行单元测试,我不认为在 makefile 或脚本中手动调用 gcov 对我有好处。

仅供参考,我正在使用这样的 lcov:

#!/bin/bash

rm -rf coverage_report
rm -f app.info

lcov -b . -d . -c -o app.info
mkdir coverage_report
genhtml --legend --highlight -o coverage_report app.info
rm -f app.info
lcov -d . -z

【问题讨论】:

    标签: gcc code-coverage gcov lcov cunit


    【解决方案1】:

    尝试使用-O0 标志进行编译。

    【讨论】:

    • 这仍然会优化单条返回语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多