Почему 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....
Спасибо!