Как заставить llvm-cov поговорить с codecov.io

Я нахожусь в процессе (наконец-то!) Настройки мониторинга покрытия кода для моего нового 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

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

Все идет нормально! Я думал, что я был близок к тому, что я хотел, но затем боль началась, когда я попытался загрузить отчет в https://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 не может обработать мои отчеты, есть ли какое-либо другое эквивалентное покрытие кода онлайн, которое я могу использовать, чтобы заставить это работать?

2 ответа

Похоже, кодеков 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).

Другой вариант - использовать 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, что упростит поддержку формата и для codecov.

Другие вопросы по тегам