Есть ли способ объединить два файла .gcda в один? - PullRequest
9 голосов
/ 29 июня 2011

У меня есть несколько модульных тестов для приложения, каждое из которых способно генерировать файлы .gcda.Я хотел бы иметь возможность создавать унифицированные файлы .gcda, которые отражают охват моего набора тестов в целом.Кажется, нет простого способа сделать это, но я могу ошибаться, и поэтому я спрашиваю.

Можно ли с помощью gcov объединить файлы .gcda?Ранее было задано , и решение состояло в том, чтобы преобразовать файлы lcov .info и объединить их таким образом.Если возможно, я бы хотел, чтобы выходные данные операции слияния по-прежнему представляли собой один файл .gcda, чтобы я не был вынужден использовать lcov.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Существует код для объединения .gcda файлов, но, к сожалению, он похоронен в libgcov.a, который собирается как часть gcc.Если вы выйдете (или каким-либо образом вызовете __gcov_flush()) программу, скомпилированную с покрытием, она фактически обнаружит уже существующие .gcda файлы, загрузит их, объединит их данные с данными запущенной программы и сохранит их обратно.Я не знаю ни одного инструмента, который обеспечивает эту функциональность в командной строке.Даже с libgcov.a у вас, вероятно, нет полезных хуков, чтобы делать то, что вы хотите, и вам придется взять исходный код из дистрибутива gcc-core и изменить его.

То, что я делал в прошлом, это просто извлекал вседанные в аннотированный источник (.gcov) и агрегировать на этом уровне.Формат .gcda способен хранить намного больше, чем информация о покрытии строк (например, число ветвей), а агрегация libgcov.a знает, как их объединить (для некоторых это не так просто, как суммирование).

1 голос
/ 07 июля 2011

Я только что создал тестовый проект, который показывает, AFAIKT, что когда одно тестовое приложение запускается последовательно с различными параметрами, тогда файлы gcda обновляются между запусками и запуском gcov один раз (я использую gcovr.py ) производит совокупную информацию о покрытии.

...