4

我有一个这样的测试代码:

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了一下,发现就是因为这个——gcc优化可以通过将一些简单的代码行与其他行组合来消除它们,但是如果我不应该使用-fprofile-arcs -ftest-coverage标志,我应该如何生成覆盖数据?

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

仅供参考,我正在使用 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
4

1 回答 1

-1

尝试使用-O0标志编译。

于 2012-09-20T08:38:00.020 回答