我正在解析 total.info 文件,该文件是在我的源代码上运行一些 lcov 命令的结果,以便构建一个在需要时提供覆盖信息的服务。lcov 还提供了一个不错的 html ui 来浏览代码覆盖率。问题是我在服务中的功能覆盖率方面得到的值与 lcov 的 html ui 不同。
我正在计算端到端测试的代码覆盖率,而不是单元测试。
Gcc 版本是 4.8.5 Red Hat
Lcov 版本是 1.14
启动的 lcov 命令按以下顺序排列:
1-time lcov -c -i -d . --rc geninfo_adjust_src_path="{path} => " -o base.info
2-time lcov -c -d . --rc geninfo_adjust_src_path="{path} => " -o test.info
3-time lcov -rc geninfo_adjust_src_path="{path} => " -a base.info -a test.info -o total.info
为了简单起见,这里有来自 total.info 文件的 2 个部分。
在本节中,解析工作正常有 5 个函数
TN:
SF:{path}/FileOne.hpp
FN:22,_methodName
FN:29,_methodName
FN:31,_methodName
FN:40,_methodName
FN:48,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:6,_methodName
FNDA:6,_methodName
FNDA:0,_methodName
FNF:5
FNH:2
DA:22,6
DA:29,12
DA:31,6
DA:33,24
DA:34,0
DA:35,6
DA:36,6
DA:40,0
DA:42,0
DA:43,0
DA:45,0
DA:48,0
DA:50,0
DA:51,0
DA:54,0
LF:15
LH:6
end_of_record
解析问题发生在下面的部分,因为某些函数似乎有重复的 FN 语句(它们都从同一行开始,所以我假设这指的是同一个函数)
TN:
SF:{path}/FileTwo.hpp
FN:32,_methodName
FN:39,_methodName
FN:48,_methodName
FN:58,_methodName
FN:64,_methodName
FN:100,_methodName
FN:116,_methodName
FN:116,_methodName
FN:128,_methodName
FN:128,_methodName
FN:128,_methodName
FN:128,_methodName
FN:132,_methodName
FN:138,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNDA:0,_methodName
FNF:14
FNH:0
DA:32,0
DA:33,0
DA:39,0
DA:40,0
DA:41,0
DA:44,0
DA:48,0
DA:49,0
DA:51,0
DA:52,0
DA:55,0
DA:56,0
DA:58,0
DA:59,0
DA:60,0
DA:61,0
DA:62,0
DA:64,0
DA:65,0
DA:66,0
DA:68,0
DA:91,0
DA:92,0
DA:96,0
DA:97,0
DA:100,0
DA:101,0
DA:102,0
DA:104,0
DA:105,0
DA:106,0
DA:112,0
DA:116,0
DA:117,0
DA:118,0
DA:121,0
DA:122,0
DA:125,0
DA:128,0
DA:129,0
DA:130,0
DA:132,0
DA:133,0
DA:134,0
DA:135,0
DA:138,0
DA:139,0
DA:140,0
DA:141,0
DA:142,0
DA:145,0
LF:51
LH:0
end_of_record
在第 116 和 128 行,函数如下:
115 : template <typename UnaryOp>
116 0 : void remove_if(UnaryOp op) {
117 0 : for (typename Items::iterator it = m_items.begin(), end = m_items.end(); it != end;) {
118 0 : if (!op(*it))
119 : ++it;
120 : else {
121 0 : shutItem(*it);
122 0 : m_items.erase(it++);
123 : }
124 : }
125 0 : }
127 : template <typename Op>
128 0 : void for_each(Op &op) {
129 0 : std::for_each(m_items.begin(), m_items.end(), op);
130 0 : }
我的问题是为什么某些函数会出现多次(谁的“FN:{}”从同一行开始)?