gcov: производить вывод .gcda из разделяемой библиотеки? - PullRequest
26 голосов
/ 15 сентября 2010

Можно ли создать файлы данных gcov (.gcda файлы), запустив исполняемый файл, связанный с общей библиотекой, созданной с параметром --coverage?

По сути, у меня есть основная библиотека, состоящая из нескольких файлов c ++, скомпилированных в одну общую библиотеку, а затем подкаталог «test», содержащий тестовую программу, которая ссылается на основную библиотеку и тестирует ее. Все отлично компилируется, и файлы .gcno создаются как для исходных файлов библиотеки, так и для исходных файлов теста. Файлы .gcda создаются только для тестовых исходных файлов, но они мне действительно нужны для реальных исходных файлов, которые скомпилированы в общей библиотеке.

Есть идеи?

Дополнительная информация:

  • Это все код C ++
  • Все строится с помощью скриптов make, созданных automake
  • Опция --coverage указана для lib_la_CPPFLAGS и lib_la_LDFLAGS в общей библиотеке Makefile.am
  • Опция --coverage указана для AM_CPPFLAGS и AM_LDFLAGS в тестовом исполняемом файле Makefile.am
  • Исходные файлы теста используют Google Test (C ++ Unit Testing Framework)

1 Ответ

26 голосов
/ 21 сентября 2010

Я наконец-то решил эту проблему, получив некоторую помощь от ребят из gcc. Смотрите тему здесь: http://gcc.gnu.org/ml/gcc-help/2010-09/msg00130.html.

Оказывается, файлы .gcda помещались в каталог .libs, поскольку там находились файлы общей библиотеки (.so). Чтобы заставить gcov выдавать выходные данные, мне пришлось переместить файлы .gcda на один уровень туда, где находились исходные файлы.

Кроме того, вот аналогичный поток, в котором кто-то еще сталкивался с некоторыми из тех же проблем: может ли gcov иметь дело с общим объектом?

...