Как заставить llvm-cov поговорить с codecov.io - PullRequest
0 голосов
/ 31 мая 2018

Я в процессе (наконец-то!) Настройки мониторинга покрытия кода для моего нового C ++ проекта.В связи с тем, что мне нужны некоторые расширенные функции C ++ 20 (читай, сопрограммы), я использую clang 6 в качестве компилятора.

Теперь я следовал этому руководству о том, каксделать базовое покрытие кода для вашего проекта, и все работает как по волшебству.Если я это сделаю:

clang++ -fprofile-instr-generate -fcoverage-mapping test.cpp -o test.out
LLVM_PROFILE_FILE="coverage/test.profraw" ./test.out
llvm-profdata merge -sparse coverage/test.profraw -o coverage/test.profdata
llvm-cov show ./test.out -instr-profile=coverage/test.profdata

Я получу хороший цветной отчет на своем терминале, который скажет мне, что покрыто, а что нет.

Пока все хорошо!Я думал, что я был близок к тому, что я хотел, но затем боль началась, когда я попытался загрузить отчет в codecov.io .

Я пробовал несколько вещей, в том числе:

  • Запуск своего скрипта https://codecov.io/bash в моей папке coverage в надежде, что, возможно, он поймает мою test.profdata.Никаких кубиков, и это имеет смысл, поскольку даже для llvm-cov нужен путь к исполняемому файлу для запуска.

  • Использование функциональности export: при запуске llvm-cov export --instr-profile=coverage/test.profdata ./test.out я получаюкрасивый файл JSON (через терминал).Я попытался выбросить вывод в файл coverage.json, который фактически был загружен, но затем codecov просто говорит, что произошла ошибка при его анализе, без дополнительной информации.

Ячувствуя себя полностью потерянным.На их веб-сайте все кажется таким черным, что я просто не понимаю, как сделать что-то, что случайно не идеально подходит для дел, которыми они могут управлять.

Как мне заставить это работатьс кодеками?Если codecov не может обработать мои отчеты, есть ли какое-либо другое эквивалентное покрытие кода онлайн, которое я могу использовать, чтобы заставить это работать?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Другой вариант - использовать GCOV-профилирование, которое немного менее точно, чем на основе исходного кода, но поддерживается codecov.io.Вам необходим флаг компилятора "--coverage".

Вы можете использовать grcov (который также можно скачать с https://github.com/mozilla/grcov/releases) для анализа файлов gcno / gcdaи загрузите их через загрузчик кода codecov.io:

grcov OBJ_DIR -s SRC_DIR -t lcov --branch > lcov.info
bash codecov.sh -f "lcov.info"

Я планирую добавить поддержку отчетов на основе исходного кода в grcov, что упростит поддержку формата и для кодеков.

0 голосов
/ 16 июня 2018

Похоже, что кодеки bash-скриптов, используемые для загрузки данных покрытия на их сайт, ищут файлы, соответствующие широкому диапазону шаблонов, связанных с форматами, которые он понимает.Они плохо документированы, но вы можете, по крайней мере, увидеть, какие шаблоны жизнеспособны, посмотрев скрипт на Github .Конечно, это не говорит вам о том, что ожидает Codecov от формата файлов, соответствующих заданному шаблону, как вы обнаружили, когда ваш файл coverage.json был отклонен.

Методом проб и ошибок я обнаружил, чтоСледующее создает файл, который codecov будет правильно интерпретировать при запуске сценария bash:

llvm-cov show ./test.out -instr-profile=default.profdata > coverage.txt

Я не проверял, какие имена файлов разрешены, но кажется, что вы можете поставитьлюбые дополнительные символы между coverage и .txt в имени файла, к которому вы передаете данные покрытия (например, вы можете назвать его coverage_my_file_name.txt).

...