Как получить 100% покрытие с помощью gcovr с кодом ifdef? - PullRequest
1 голос
/ 30 октября 2019

Мне нравится работать с gcovr на моем компьютере с Linux, чтобы понять, что тестируется, а что нет. Я упал в яму, где я не вижу решения.

У меня есть C-код, как показано ниже (сохранить как main.c). Код сделан очень простым - и в действительности основное внимание уделяется только конструкции #if и способам работы с анализом покрытия для различных установок компиляции.

/* Save as main.c */

void fct(int a)
{
// Define PRINTSTYLE to 0 or 1 when compiling
#if PRINTSTYLE==0
    if (a<0) {
        printf("%i is negative\n", a);
    } else {
        printf("%i is ... sorta not negative\n", a);
    }
#else
    if (a<0) {
        printf("%i<0\n", a);
    } else {
        printf("%i>=0\n", a);
    }
#endif
}


int main(void)
{
    fct(1);
    fct(-1);
    return 0;
}

, которые я могу скомпилировать и выполнить тест покрытия в Linux, используянапример,

$ rm -f testprogram *.html *.gc??
$ gcc -o testprogram main.c \
  -g --coverage -fprofile-arcs -ftest-coverage --coverage \
  -DPRINTSTYLE=0
$ gcovr -r . --html --html-details -o index.html
$ firefox index.main.c.html

Это почти супер - но я хочу объединить результаты испытаний для -DPRINTSTYLE=0 (см. ahove) и -DPRINTSTYLE=1 - тогда я логически должен получить 100% охват впроизведенный index.main.c.html

Я полностью понимаю, что в середине необходима перекомпиляция.

Как получить 100% покрытие gcovr с кодом ifdef?

1 Ответ

1 голос
/ 07 ноября 2019

Это выполнимо, но требуется gcovr 4.2 (или более поздняя версия), как показано в https://gcovr.com/en/stable/guide.html#combining-tracefiles

Сначала установите или обновите gcovr, например, с помощью

pip install -U gcovr

Затем убедитесь, что ~ /. local / bin / находится в $ PATH.

Затем выполните gcovr один раз для каждой конфигурации и создайте отчет JSON:

gcc -o testprogram main.c -g --coverage -DPRINTSTYLE=0
./testprogram
gcovr -r . --json run-1.json

gcc -o testprogram main.c -g --coverage -DPRINTSTYLE=1
./testprogram
gcovr -r . --json run-2.json

Наконец, объедините отчеты JSON с помощью -a /--add-tracefile mode и создайте нужный отчет:

gcovr --add-tracefile run-1.json --add-tracefile run-2.json --html-details coverage.html

Ссылка: https://github.com/gcovr/gcovr/issues/338

...