О какой ветке в деструкторе сообщает gcov?

Когда я использую 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.2
  • gcov (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2
39
задан Eddy Pronk 26 August 2011 в 02:12
поделиться