Разбор lcov total.info - PullRequest
       94

Разбор lcov total.info

0 голосов
/ 13 марта 2020

Я анализирую файл 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: {}" начинается с той же строки)?

...