Я анализирую файл total.info, который является результатом выполнения нескольких команд lcov в моем исходном коде для создания службы, которая предоставляет информацию о покрытии при необходимости. lcov также предоставляет хороший html интерфейс для просмотра покрытия кода. Проблема в том, что я получаю другие значения с точки зрения покрытия функций в моем сервисе, чем html пользовательский интерфейс lcov.
Я вычисляю покрытие кода в сквозных тестах, а не в модульных тестах.
G cc версия 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
Для упрощения приведем 2 раздела из файла total.info.
В этом разделе синтаксический анализ работает правильно. Имеется 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: {}" начинается с той же строки)?