#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, но являются только деталями реализации. Я стараюсь сосредоточиться на ветвях, находящихся под моим контролем.