如何在没有优化的情况下将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
标志编译。这仍然会优化单返回状态。