Почему gcc 4.1 + gcov сообщает о 100% покрытии веток, а более новые (4.4, 4.6, 4.8) сообщают о 50% для "p = new class;" линия?

При gcc 4.1 (используя gcov) следующая строка:

р = новый класс;

сообщается как 100% покрытие филиала <- ЭТО ОК для меня.

Почему использование gcc 4.4 и выше в той же строке сообщается как:

[+ -] p = новый класс; (50% покрытие филиала)... <- ЭТО проблема для покрытия 100%!!!

Могу ли я установить дополнительные параметры для более новых версий gcc, чтобы сообщать о том же покрытии ветви, что и gcc 4.1 для отдельных строк, как "p = new Class;".

Заранее спасибо.

1 ответ

Решено!

У нас есть несколько файлов C/C++ с обработкой исключений и без нее, поэтому lcov/gcov обрабатывает "обработку исключений" для каждого блока кода.

Внутри нормального блока, например:

int main(void)
{
 ...
 ...
 [+ -] printf("Hello\n");
 ...
}

gcov сообщает, что в строке printf "охват филиала" составляет 50% ---> ПОЧЕМУ?

Потому что обработка исключений включена!!!

Для решения этой проблемы укажите:

-fno-исключения

в командной строке g ++.

Пример:

g ++ -O0 - охват -fno-исключения -fno-inline....

Спасибо!

Другое решение - использовать --exclude-throw-branches если ты бежишь gcovr. Например:

gcovr --exclude-throw-branches ...

Это позволяет вам по-прежнему генерировать исключения в вашем коде, но исключать все ветви, генерируемые исключениями. Подробнее об этом в FAQ по gcovr

Другие вопросы по тегам