Вот

я использую gcov для измерения покрытия тестами кода C ++, он сообщает о ветвях в деструкторах.

struct Foo
{
    virtual ~Foo()
    {
    }
};

int main (int argc, char* argv[])
{
    Foo f;
}

Когда я запускаю gcov с включенными вероятностями ветвления (-b), я получаю следующий вывод.

$ gcov /home/epronk/src/lcov-1.9/example/example.gcda -o /home/epronk/src/lcov-1.9/example -b
File 'example.cpp'
Lines executed:100.00% of 6
Branches executed:100.00% of 2
Taken at least once:50.00% of 2
Calls executed:40.00% of 5
example.cpp:creating 'example.cpp.gcov'

Часть, которая беспокоит меня, это "Взятые хотя бы один раз: 50,00% от 2".

Сгенерированный файл .gcov дает более подробную информацию.

$ cat example.cpp.gcov | c++filt
        -:    0:Source:example.cpp
        -:    0:Graph:/home/epronk/src/lcov-1.9/example/example.gcno
        -:    0:Data:/home/epronk/src/lcov-1.9/example/example.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:struct Foo
function Foo::Foo() called 1 returned 100% blocks executed 100%
        1:    2:{
function Foo::~Foo() called 1 returned 100% blocks executed 75%
function Foo::~Foo() called 0 returned 0% blocks executed 0%
        1:    3:    virtual ~Foo()
        1:    4:    {
        1:    5:    }
branch  0 taken 0% (fallthrough)
branch  1 taken 100%
call    2 never executed
call    3 never executed
call    4 never executed
        -:    6:};
        -:    7:
function main called 1 returned 100% blocks executed 100%
        1:    8:int main (int argc, char* argv[])
        -:    9:{
        1:   10:    Foo f;
call    0 returned 100%
call    1 returned 100%
        -:   11:}

Обратите внимание на строку «Ветка 0 взята 0% (падение)».

Что вызывает эту ветку и что мне нужно сделать в коде, чтобы получить 100% здесь?

g ++ (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2gcov (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2

Ответы на вопрос(3)

Ваш ответ на вопрос