如何在没有优化的情况下将gcov与gcc结合使用?

如何在没有优化的情况下将gcov与gcc结合使用?,gcc,code-coverage,gcov,lcov,cunit,Gcc,Code Coverage,Gcov,Lcov,Cunit,我有这样一个测试代码: int diff21(int n) { if (n <= 21) { return 21 - n; } else { return (n - 21) * 2; } } CU_ASSERT(diff21(19) == 2); #!/bin/bash rm -rf coverage_report rm -f app.info lcov -b . -d . -c -o app.info

我有这样一个测试代码:

int diff21(int n)
{
    if (n <= 21)
    {
        return 21 - n;
    }
    else
    {
        return (n - 21) * 2;
    }
}
CU_ASSERT(diff21(19) == 2);
#!/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
我用lcov生成了一个html报告,它说执行了
else
分支的
返回(n-21)*2
,所以我得到了100%的行覆盖率这不是真的

我在谷歌上搜索发现,这是因为---gcc优化可以通过将一些简单的代码行与其他代码行组合来消除它们,但是如果我不应该使用
-fprofile arcs-ftest coverage
标志,我应该如何生成覆盖率数据?

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

仅供参考,我使用lcov如下:

int diff21(int n)
{
    if (n <= 21)
    {
        return 21 - n;
    }
    else
    {
        return (n - 21) * 2;
    }
}
CU_ASSERT(diff21(19) == 2);
#!/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

尝试使用
-O0
标志编译。

这仍然会优化单返回状态。