Подтвердить что ты не робот

Данные по охвату веток для lcov

Я пытаюсь использовать lcov для показателей охвата кода, но я не могу получить покрытие веток для работы.

Вот как я его использую:

g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test 
lcov --zerocounters --directory $PWD 
lcov --capture --initial --directory $PWD --output-file coverage_output  
./bin/test 
lcov --no-checksum --directory $PWD --capture --output-file coverage_output 
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output

но я получаю:

Общая ставка покрытия:
линии......: 100,0% (60 из 60 строк)
функции..: 100.0% (26 из 26 функций)
ветвей...: данных не найдено

любые идеи?

4b9b3361

Ответ 1

В последней версии LCOV отключено покрытие ветки по умолчанию.

Вам необходимо включить его:

  • отредактируйте файл ~/.lcovrc (скопированный из /etc/lcovrc), чтобы изменить настройку lcov_branch_coverage на 1
  • добавив --rc lcov_branch_coverage=1 в ваши командные строки lcov

Ответ 2

.lcovrc файлы - это файл настроек, который необходимо поместить в путь к файлу lcov. Честно говоря, я не много разбирался в использовании этого файла.

Вам нужно добавить дополнительный параметр как "--rc lcov_branch_coverage = 1" в lcov для всех вызовов. В вашем случае добавьте этот параметр ко всем вашим трем вызовам. Если вы пропустите один, это снизит охват веток.

Кроме того, для genhtml необходим охват.

Ответ 3

Извините, не столько "идея", сколько подтверждение того, что вы все делаете правильно. Ваши точные команды работали над этим простым кодом:

#include <iostream>
using namespace std;

bool foo(int i)
{
    if (i != 0) {
        return 12 / i;
    } else {
        return 0;
    }
}

int main(int argc, char** argv)
{
    cout << foo(argc) << endl;
    return 0;
}

В таблице покрытия lcov есть статистика для строк, функций и ветвей. Может быть, дважды проверьте, что вы на самом деле смотрите на правильный выходной HTML?

Ответ 4

на основе этого сообщения, разница может зависеть от версии gcc, которую вы используете. Можете ли вы поделиться, какие версии вы используете. Я не получаю информацию о филиале:

 i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)