Есть ли способ сосредоточить отчеты о покрытии кода lcov только в одном или двух каталогах?
-
10-07-2019 - |
Вопрос
Недавно я начал использовать lcov для визуализации покрытия своего кода.Это отличный инструмент.
Я заметил одну вещь: он генерирует отчеты о покрытии кода для всех файлов, которые я использую, включая те, которые меня не интересуют.Например, он предоставит мне отчеты о покрытии кода для файлов boost и mysql++.
Есть ли простой способ заставить lcov генерировать отчеты о покрытии только для определенных файлов?
Я попробовал использовать параметр -k следующим образом:
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info {run unit tests now} /usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info /usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info /usr/bin/genhtml -q -o lcov_output_directory app_total.info
(Это означает, что мне нужны только файлы покрытия для каталогов «include» и «src».)
Однако, похоже, это не работает.Отчет по-прежнему показывает мне все посторонние файлы.Любые предложения очень ценятся.Спасибо!
Решение
lcov поддерживает аргумент командной строки - удалить делать именно то, что вы просите.
Другие советы
Я использовал флаг - no-external
вместе с флагом - directory
, чтобы исключить ненужные файлы.
Определение внешнего от человека:
Внешние исходные файлы - это файлы, которые не находятся ни в одном из каталогов, указанных в --directory или --base-directory.
Итак, моя команда выглядела так:
$ lcov --directory src -c -o report.info --no-external
Capturing coverage data from src
Found gcov version: 4.2.1
Scanning src for .gcda files ...
Found 4 data files in src
Processing src/C####.gcda
ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h
Возможный подход — ограничить компиляцию файлов с помощью флагов покрытия (-fprofile-arcs -ftest-coverage).Если вы не хотите, чтобы ваша файловая система make избирательно определяла, какие файлы собираются с помощью инструментов тестирования, вам может подойти следующий прием:
- Создайте свое приложение без инструментов.
- Удалите файлы .o для источника, который вы хотите инструментировать.
- Включите приборы и перестройте.Только удаленные объектные файлы будут восстановлены с использованием инструментов.
- Запустить lcov
Это должно привести к тому, что только целевые области будут генерировать артефакты gcov, которые слепо используются сценариями lcov.