Gcov报告返回声明未被命中

时间:2012-11-29 11:30:41

标签: c++ gcov

gcov抱怨我的一个算法:

File 'Algorithm.h'
Lines executed:95.00% of 20
Algorithm.h:creating 'Algorithm.h.gcov'

   17:   25:inline std::vector<std::string> starts_with(const std::vector<std::string>& input, const std::string& startsWith)
    -:   26:{
   17:   27:    std::vector<std::string> output;
   17:   28:    std::remove_copy_if(input.begin(), input.end(), std::back_inserter(output), !boost::bind(&boost::starts_with<std::string,std::string>, _1, startsWith));
#####:   29:    return output;
    -:   30:}

我的测试看起来像这样,它通过了:

TEST (TestAlgorithm, starts_with)
{
    std::vector<std::string> input = boost::assign::list_of("1")("2")("22")("33")("222");
    EXPECT_TRUE(starts_with(input,"22") == boost::assign::list_of("22")("222"));
}

问题可能是什么?我没有使用优化。

更新

我的CMakeList.txt包含:

if(CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "-O0")        ## Optimize
endif()

1 个答案:

答案 0 :(得分:2)

尝试使用g ++中的-fno-elide-constructors开关

从GCC的权威指南:

  

-fno-elide-constructors:编译C ++选项时此选项导致GCC在初始化对象时不会忽略创建临时对象   C ++标准允许的相同类型。指定这个   选项导致GCC显式调用所有的复制构造函数   例。

这里有一些讨论: How can I get more accurate results from gcov? 在这里:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076