Отчеты о многопроцессорном покрытии - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь отслеживать охват кода моего C ++ проекта.Как я уже говорил в предыдущем вопросе, мне нужно использовать сопрограммы и другие расширенные функции C ++ 2a, поэтому я использую clang++ для его компиляции.Я обнаружил здесь , что можно использовать флаг -coverage при компиляции с clang++ (наряду, очевидно, с -O0 и -g).

Наряду с исполняемым файломфайл, это создает файл .gcno, содержащий карту исполняемого файла.Когда исполняемый файл запускается, генерируется дополнительный .gcda файл, содержащий фактические данные профилирования.

Я заметил, что, если я запускаю исполняемый файл несколько раз, выходные данные покрытия хорошо и правильно объединяются в .gcdaфайл, который очень хорош.

Теперь мне интересно, безопасно ли одновременно запускать несколько экземпляров исполняемого файла.

Прежде чем кто-либо предложит запустить тест последовательно: I am запускает их последовательно, но мое приложение использует много сетей, и для некоторых тестов требуется совместное взаимодействие нескольких экземпляров (я использую Docker для симуляции сети и netem для получения своего рода реалистичных сценариев связи).

Вызовет ли одновременный запуск нескольких экземпляров одного исполняемого файла?Я могу себе представить, что если будет реализован какой-либо механизм блокировки, данные покрытия будут безопасно и атомарно записаны в файл .gcda, и если другим исполняемым файлам потребуется выполнить дамп, они будут ждать, пока не будет снята блокировка.Однако я нигде не смог найти гарантию, что это действительно произойдет.

1 Ответ

0 голосов
/ 10 октября 2018

Профилирование GCOV должно быть многопроцессорным, начиная с Clang 7.

В Clang 6 были две ошибки, препятствующие его работе, https://bugs.llvm.org/show_bug.cgi?id=34923 и https://bugs.llvm.org/show_bug.cgi?id=35464,, но теперь ониисправлено.

Infact, в настоящее время мы используем его для сбора данных покрытия для Firefox, который является многопроцессорным.У нас обоих есть несколько процессов в самом Firefox, и мы также запускаем тесты (для некоторых конкретных наборов тестов) параллельно.

...