Lcov: Отчет о покрытии филиалов отображает некоторую информацию, точно не знаю, что это значит (т. е. Филиал 5 не был взят)

#c #lcov

Вопрос:

Пожалуйста, найдите приведенный ниже отчет LCOV о моем коде:

   83                 :         84 :   uint8_t a = 0;
  84         [    - ]:         84 :   ret = check_uint(section, VALUE, amp;a);
  85         [      ]:         84 :   if (success != ret) {​
  86 [    - ][    - ]:          1 :     std::cout << "a read from section. returned Error" << endl;
  87                 :          1 :     return ret;
  88                 :            :   }​
 

В строке № 86 (-) не занята его отображающая ветвь 5 не была занята, но вероятность повторения равна 2(успех или неудача).
Кто-нибудь может, пожалуйста, пояснить мне, что именно означает (ветвь 5 не была взята) в отчете о покрытии филиала lcov?

Ответ №1:

Короткая форма заключается в том, что взаимодействие lcov с ветвлением, особенно со встроенными вызовами, может найти некоторые скрытые ветви в коде, которые находятся вне вашего контроля.

Например, шаблонные функции (из которых std::cout << "foo" одна) могут быть эффективно встроены компилятором. Это означает, что любые ветви, присутствующие в этом коде, также могут быть видны компилятору. Это, конечно, позволяет компилятору выполнить более тщательную оптимизацию. Это та ветвь, которую вы видите здесь. Это не в коде, который вы написали, а в коде, созданном для вас шаблоном.

В частности, большинство функций форматированного вывода basic_ostream будут обеспечивать, чтобы поток находился в хорошем состоянии до выполнения работы по форматированию или вставке.

Когда я провожу анализ ветвей, я склонен игнорировать пропуски ветвей в таких функциях, как эта. В C есть несколько подобных мест, ветви которых обнаруживаются gcov/lcov, но являются только деталями реализации. Я стараюсь сосредоточиться на ветвях, находящихся под моим контролем.