gcc - 如何在没有优化的情况下将 gcov 与 gcc 一起使用?

标签 gcc code-coverage gcov lcov cunit

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

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% 的线路覆盖率。 这不是真的

我用谷歌搜索,发现是因为 this --- gcc 优化可以消除一些简单的代码行,将它们与其他行结合起来,但是,如果我不应该使用 -fprofile-arcs -ftest-coverage,我应该如何生成覆盖数据?旗帜?

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

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

最佳答案

尝试使用 -O0 编译旗帜。

关于gcc - 如何在没有优化的情况下将 gcov 与 gcc 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12189519/

相关文章:

c++ -/usr/bin/ld : warning: abc. 所以,找不到 xyz.so 所需(尝试使用 -rpath 或 -rpath-link)”

c++ - GCC 可选预处理器一次输出和编译

c++ - 函数所需的堆栈空间会影响 C/C++ 中的内联决策吗?

android - 在 Android Studio 中运行代码覆盖时,类名标记为 'not covered'

GCov 和 GCC,未创建 *.da 文件

c - 包装 open() 进行单元测试将使 gcov 无法打开 gcda 文件

gcc - 在具有 32 位用户空间的 64 位系统上,Configure 无法检测到正确的 ld

unit-testing - 在 GO 中测试 - 项目包中的代码覆盖率

go - go tool cover : Overview of coverage per file的HTML输出

linux - 尽管安装了调试信息,但 GDB 未显示行号信息