Gcov работает, но Gcovr не работает

Когда я запускаю gcov, вывод говорит о покрытии 87%... тогда я хочу использовать gcovr, но он никогда не работает. Я пытался запустить из многих каталогов, с большим количеством опций. В некоторых случаях несколько файлов я получаю, но не тот файл, который хочу видеть.

Мой проект состоит из 3 файлов:

  • src\main.c
  • src\makefile
  • tst\test1.c
  • tst\test2.c
  • tst\makefile
  • tst\obj\all объектные файлы, gcno, gcda хранятся здесь...
  • build\build.bat сделать проект (windows)

Должен ли я изменить структуру каталогов? Как узнать, какую версию gcov мне следует использовать? Я хочу увидеть покрытие для main.c, но получить покрытие только для test1.c и test2.c, а они не имеют отношения к покрытию!!

Рядом с тестовыми файлами у меня есть включаемые каталоги на C:\compiler, которые не требуются для покрытия.

Я попробовал Python27:

python c:\python27\scripts\gcovr -g --object-directory=. -r ..\..\..\ --html --html-details -o program.html -v

Я попробовал Python36:

c:\python36\scripts\gcovr --use-gcov-files -v --object-dir=.

Но никогда не получайте покрытие для моего тестируемого устройства. Только gcov без gcovr работает, поэтому файлы должны быть правильные.


person Bart Mensfort    schedule 27.03.2018    source источник
comment
(1) Можете ли вы указать, какую версию gcovr и какую версию GCC/gcov вы используете? (2) Из каких каталогов вы запускаете gcovr?   -  person amon    schedule 27.03.2018
comment
Можете ли вы также объяснить, почему вам нужно использовать флаг -g/--use-gcov-files? Эта опция предполагает, что вы ранее запускали gcov для всех интересующих вас исходных файлов. Можете ли вы показать, как вы вызываете gcov?   -  person amon    schedule 28.03.2018
comment
gcov прост в использовании, но вывод бесполезен для Дженкинса. Я не пытался сделать его совместимым, вместо этого отлаживал gcovr. Я разветвил основной проект и внес изменения для окон по адресу: github.com/barthoukes/gcovr, и они работают. для C и C++ в Windows 10. Для Linux это уже работает нормально. Просто получите 1 файл, gcovr. На самом деле это скрипт на Python, который легко отлаживать.   -  person Bart Mensfort    schedule 15.04.2018


Ответы (2)


попробуйте добавить опцию -f ''. В gcovr есть ошибка, которая вылезает, когда мы строим из дерева.

person porcupineG    schedule 27.03.2018
comment
Уже нашел проблему, отключив некоторые строки внутри самого gcovr. На самом деле скрипт очень маленький, поэтому его легко отлаживать. На самом деле \ дублируется и изменяется на \\, поэтому я обнаружил, что c:\dir\source\ изменен на C\\:\\\\dir\\source\\ и это никогда больше не будет сравниваться с c:\dir \source, после чего все файлы отфильтровываются. В Linux этой проблемы нет, поэтому gcovr нужно доработать, чтобы сделать его совместимым с Windows. - person Bart Mensfort; 28.03.2018
comment
@BartMensfort Я уверен, что может быть решение без необходимости взломать код gcovr, если вы сможете ответить на мой комментарий к вашему вопросу — из каких каталогов вы запускаете gcovr? фильтрация в Windows имеет проблемы. Если вы поможете мне понять вашу проблему, это поможет мне разработать более разумный подход к фильтрации. - person amon; 28.03.2018

Я обнаружил несколько проблем при запуске GCOVR в Windows, особенно в отношении \ вместо / и использования символа двоеточия : в имени типа C:\file.c.

При использовании \нужно использовать 2 из них\ и где-то в gcovr он меняется на \\или \\\... это не очень хорошо, в какой-то момент он пытается найти корень ваших исходных файлов путем вычитания 2 пути. но он не может найти это, например. \a\b\c\d он не найдет в \a\b\c\d . Итак, загляните: [github.com/barthoukes/gcovr][1]

Решение все еще очень грязное, но оно работает для моих проектов в Windows. Я думаю, что люди gcovr также обсуждают эту проблему.

Вам нужен только файл: gcovr

person Bart Mensfort    schedule 15.04.2018
comment
Я попытался просмотреть ваш форк gcovr, но не смог найти ваши изменения. Не могли бы вы git push их сделать общедоступными? Кстати, я один из сопровождающих gcovr, поэтому меня очень интересует решение, которое вы придумали. - person amon; 16.04.2018