Покрытие кода с использованием gcov при параллельном запуске

У меня есть настройка покрытия кода C / C ++ с помощью gcov для нескольких файлов в проекте.
Исполняемые файлы выполняются параллельно. Это приводит к тому, что какой-то общий фрагмент кода будет выполняться параллельно.

Я получаю поврежденные файлы .da или файлы нулевого размера .da. Это проблема при параллельном запуске?

Поскольку два или более исполняемых экземпляра пытаются записать в один и тот же файл .da для записи количества покрытия для каждого выполняемого оператора?

Если так, есть ли обходной путь?

Gcov версия используется 1.5

4

Решение

Что ж, похоже, вы уже выяснили причину проблемы и искали обходной путь.
Я успешно настроил несколько проектов для покрытия кода с помощью gcov.
Я хотел бы прояснить несколько вещей для вас:

  • мы получаем .gcno файлы для каждого из исходных файлов с инструментами --coverage опция во время компиляции.
  • И во время исполнения мы получаем .gcda файлы для каждого из файлов gcno.

.gcno Файлы — это просто структурные схемы соответствующих файлов исходного кода.
.gcda файлы являются фактическими данными покрытия, сгенерированными во время выполнения.

Итак, в вашей ситуации .gcda (раньше был .da в более ранних версиях) возникают конфликты, когда два или более выполнения пытаются записать одно и то же .gcda подать одновременно.

Простейшим обходным решением будет запуск тестов поочередно. (По крайней мере, так я и сделал)
вам не нужно беспокоиться о потере данных о покрытии как .gcda получает прилагается с каждым исполнением и не перезаписывается. Имейте в виду, что вам не нужно делать перекомпиляцию, потому что это изменит .gcno файлы и .gcda файлы до этого станут бесполезными.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]