Я пытаюсь сгенерировать отчет о покрытии кода для некоторых индивидуально скомпилированных тестов в Ubuntu 18.04 и сталкиваюсь со странной проблемой. Если я скомпилирую с помощью clang 5.0.0 и передам ему флаги -fprofile-instr-generate
и -fcoverage-mapping
, он действительно сработает, и запуск скомпилированного теста заставит его выплеснуть файл .profraw, который я могу обработать с помощью llvm-cov, и превратить в отчет о покрытии. Тем не менее, единственное покрытие, которое, кажется, отслеживается, - это тестовая программа и любой код, напрямую включенный через #include
, полностью игнорирующий код, который был связан. Например, если заголовочный файл включен через #include
, он покажет покрытие для этого файла, но не для связанного. c файла, в котором хранится фактический вызываемый код. Из некоторых исследований казалось, что решение было также добавьте -fprofile-instr-generate
к шагу связывания, но это никак не изменило результат. Это ужасная практика (и неустойчивая) - вручную #include
любые файлы, для которых я хочу увидеть покрытие, но я не вижу другой опции, которая позволяет мне просматривать покрытие связанного кода (в частности, покрытие функции, которую я использую). вызов в тестовом жгуте и все, что вызывает функция). Это проблема других людей, и кто-нибудь знает, как ее решить?