#c #gcov #lcov
#c #gcov #lcov
Вопрос:
- Я создал простое приложение hello word cpp.
- Скомпилировал его, передав gcc —флаг покрытия
- Выполнил исполняемый файл
- Сгенерированное покрытие путем вызова
lcov --directory . --capture --output-file ic.info
- Сгенерированный отчет на основе html с помощью genhtml
genhtml -o html/ ic.info
Теперь вопрос. Независимо от того, сколько раз я запускаю исполняемый файл, я всегда получаю один и тот же результат, то есть одинаковое покрытие строк и функций. Должно ли это увеличивать покрытие строки для каждого выполнения? Я что-то не так понимаю?
Если lcov
генерирует покрытие только для одного выполнения, то как я могу сгенерировать покрытие для всех выполненных мной исполнений?
Комментарии:
1. Это может быть глупый вопрос, но: вы каждый раз запускаете свой код с разными входными данными, верно?
2. На самом деле это увеличивает количество выполнений для каждой строки … но что для раздела попадания???
3. Я выполняю без какого-либо ввода… как обстоит дело с входными данными? Разве они не суммируются?
4. Если вы запускаете свою программу с одним и тем же вводом (или без него), следующий путь кода будет точно таким же каждый раз, если у вас нет зависящего от времени поведения, использования случайных значений или какого-либо другого источника внешних данных, которые могут отличаться (или кода с ошибками / неопределенным поведением). Ожидается, что выходные данные покрытия должны быть на 100% идентичными для всех запусков, если глобальный набор входных данных фиксирован.
Ответ №1:
Я думаю, вы неправильно понимаете, как генерируются результаты покрытия. lcov
не генерирует покрытие, как указано в вашем вопросе. Он обрабатывает только результаты покрытия, которые генерируются при запуске вашей программы (шаг 3 в вашем вопросе).
Итак, при многократном выполнении программы (шаг 3) время выполнения вашей строки увеличится (покрытие не обязательно). Чтобы увидеть это, вы можете создать несколько отчетов о покрытии (выполнить шаги 3,4 и 5 несколько раз). Вы увидите увеличение времени выполнения строк в вашем коде в отчетах, созданных на шаге 5.