У меня есть настройка покрытия кода C / C ++ с помощью gcov для нескольких файлов в проекте.
Исполняемые файлы выполняются параллельно. Это приводит к тому, что какой-то общий фрагмент кода будет выполняться параллельно.
Я получаю поврежденные файлы .da или файлы нулевого размера .da. Это проблема при параллельном запуске?
Поскольку два или более исполняемых экземпляра пытаются записать в один и тот же файл .da для записи количества покрытия для каждого выполняемого оператора?
Если так, есть ли обходной путь?
Gcov версия используется 1.5
Что ж, похоже, вы уже выяснили причину проблемы и искали обходной путь.
Я успешно настроил несколько проектов для покрытия кода с помощью gcov.
Я хотел бы прояснить несколько вещей для вас:
.gcno
файлы для каждого из исходных файлов с инструментами --coverage
опция во время компиляции..gcda
файлы для каждого из файлов gcno. .gcno
Файлы — это просто структурные схемы соответствующих файлов исходного кода.
.gcda
файлы являются фактическими данными покрытия, сгенерированными во время выполнения.
Итак, в вашей ситуации .gcda
(раньше был .da
в более ранних версиях) возникают конфликты, когда два или более выполнения пытаются записать одно и то же .gcda
подать одновременно.
Простейшим обходным решением будет запуск тестов поочередно. (По крайней мере, так я и сделал)
вам не нужно беспокоиться о потере данных о покрытии как .gcda
получает прилагается с каждым исполнением и не перезаписывается. Имейте в виду, что вам не нужно делать перекомпиляцию, потому что это изменит .gcno
файлы и .gcda
файлы до этого станут бесполезными.
Других решений пока нет …