Покрытие Native Code с системой сборки Android Soong - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать отчет о покрытии кода для своих собственных компонентов с исходным кодом AOSP, используя систему сборки soong.

Я расширил aosp vhal, но примеры модульных тестов такие же, как в приведенной ниже ссылке.http://androidxref.com/8.1.0_r33/xref/hardware/interfaces/automotive/vehicle/2.0/default/tests/

Попытка добавления ниже в cc_test, cc_binary в Android.bp

native_coverage : true,

    cflags: [
         "-g",
         "-O0",
         "-fprofile-arcs",
         "-ftest-coverage",
    ],

     ldflags : [
        "-fprofile-arcs",
        "-ftest-coverage",
    ],

Собственный двоичный файл покрытие юнит-тестов создается в out / target / productно я не могу найти промежуточные звенья gcno для этого.

При выполнении команды ниже приводятся файлы * .gcda для каждого файла теста.

adb shell \
    GCOV_PREFIX=/data/local/tmp \
    GCOV_PREFIX_STRIP=`echo $ANDROID_BUILD_TOP | grep -o / | wc -l` \
    /data/local/tmp/unit-tests-coverage

Я попробовал нижессылки, но не знаю, как действовать :(

http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/ https://android.googlesource.com/platform/bionic.git/+/master-soong https://android.googlesource.com/platform/build/soong/+/581341d%5E%21/ https://android.googlesource.com/platform/external/e2fsprogs/+/fedfb27%5E%21/ https://android.googlesource.com/platform/development/+/master/scripts/acov#23 http://androidxref.com/9.0.0_r3/xref/bionic/README.md#293

Я не уверен, что здесь можно использовать gts vts framework для генерации покрытия собственного кода. https://codelabs.developers.google.com/codelabs/android-vts-8/#6

" gcnodir " генерируется, но не уверен, как его использоватьоб этом. /coverage/data/nativetest64/vehicle-unit-tests-coverage/unit-tests-coverage.gcnodir

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Отправка ответа на мой вопрос для других пользователей на SO.

Установка инструмента покрытия:

  1. sudo apt-get install lcov (Это должно установить lcov-1.12)
  2. sudo apt-get install gcc-4.6 (Clang генерирует .gcno, приблизительно равный gcc 4.2, который не совместим с gcov-4.8. Установка gcc-4.6 для получения gcov-4.6 и вызов lcov с помощью '--gcov-tool /usr/bin/gcov-4.6')
  3. Загрузите LLVM 3.8 для работы llvm-cov: http://releases.llvm.org/download.html

Все нативные тестовые примеры, т. Е. Инструментированный двоичный файл, должны быть выполнены на цели.Построить и создать профилирование на основе инструментальных средств Clang.Пример: http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/automotive/vehicle/2.0/default/Android.bp#82 (переименован в тест-менеджер транспортного средства для более короткого имени)

  • export NATIVE_COVERAGE = true
  • Add native_coverage: true для тестирования модуля в Android.bp
  • Перейдите по адресу: имя-модуля / test
  • Используйте команду mm или make для создания собственного двоичного файла
  • Пример: Для оборудования / интерфейсов /автомобили / транспортное средство / 2.0 / по умолчанию / тесты /: mma или make-manager-manager-unit-test -j32
  • Копировать инструментированный двоичный файл с включенным покрытием в цель
  • adb push out/target/product/product_name/data/nativetest64/vendor/vehicle-manager-unit-test /data/nativetest64/vehicle-manager-unit-test adb shell chmod +x /data/nativetest64/vehicle-manager-unit-test

  • Запуск тестов и генерация файлов .gcda

    adb shell \ GCOV_PREFIX=/data/local/tmp \ GCOV_PREFIX_STRIP=echo $ANDROID_BUILD_TOP | grep -o / | wc -l \ /data/nativetest64/vehicle-manager-unit-test

  • adb shell find -iname *.gcda

  • adb pull /data/local/tmp/proc/self/cwd/out/soong/.intermediates/hardware/interfaces/automotive/vehicle/2.0/default/vehicle-manager-unit-test/android_x86_64_silvermont_vendor_cov/obj/hardware/interfaces/automotive/vehicle/2.0/default/tests/ .(Destination folder)

  • Извлечение файлов GCNO из GCNODIR (архивный файл, созданный в out / overage / data / nativetest64 / vendor / vehicle-manager-unit-test) в ту же папкус файлами GCDA

  • llvm-cov gcov -f -b *.gcda (https://llvm.org/docs/CommandGuide/llvm-cov.html)

  • lcov --directory . --base-directory . --gcov-tool /usr/bin/gcov-4.6 --capture -o cov.info (http://ltp.sourceforge.net/coverage/lcov.php)

  • genhtml cov.info -o output

sample coverage report for vhal 2.0 Вот сценарий, которыйaps все эти команды: https://gist.github.com/pankajgangwar/f070b8b54e83543f8e3638dcd2cae1b8

0 голосов
/ 06 февраля 2019

здесь объясняется, как генерировать отчеты о покрытии, для которых требуется GTest :

эти флаги позволяют генерировать тестовое покрытие: -fprofile-arcs -ftest-coverage

, тогда нужно использовать gcov : gcov main_test.cpp

, который затем может быть передан в lcov (для ссылка ):

$ lcov --coverage --directory . --output-file main_coverage.info

, из которой можно создать lcov отчет о покрытии в формате HTML:

$ genhtml main_coverage.info --output-directory out

эти .gcda файлы в .gcnodir являются gcov файлами данных.gcov также имеет опцию вывода --json-format, которая может пригодиться при желании использовать данные покрытия с помощью веб-службы.


один из примеров изпредоставленные вами ссылки можно использовать для генерации всего проекта:

Собрать результаты покрытия кода:

$ lcov --directory . \
   --base-directory . \
   --gcov-tool gcov.sh \
   --capture -o cov.info

Создать HTML-файлы:

$ genhtml cov.info -o output

где единственное отличие состоит в том, что скрипт оболочки должен быть настроен для вызова gcov.возможно, можно даже опустить оболочку, переданную с параметром --gcov-tool, поскольку он должен вызываться напрямую.


, поскольку можно подготовить отчет о покрытии только путем добавления флагов компилятора, gcov и *Команды 1055 * должны быть настроены как сценарий после сборки, чтобы они автоматически генерировали отчет.

...