Почему 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 ....

Спасибо !

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