Я пытаюсь отслеживать охват кода моего C ++ проекта.Как я уже говорил в предыдущем вопросе, мне нужно использовать сопрограммы и другие расширенные функции C ++ 2a, поэтому я использую clang++
для его компиляции.Я обнаружил здесь , что можно использовать флаг -coverage
при компиляции с clang++
(наряду, очевидно, с -O0
и -g
).
Наряду с исполняемым файломфайл, это создает файл .gcno
, содержащий карту исполняемого файла.Когда исполняемый файл запускается, генерируется дополнительный .gcda
файл, содержащий фактические данные профилирования.
Я заметил, что, если я запускаю исполняемый файл несколько раз, выходные данные покрытия хорошо и правильно объединяются в .gcda
файл, который очень хорош.
Теперь мне интересно, безопасно ли одновременно запускать несколько экземпляров исполняемого файла.
Прежде чем кто-либо предложит запустить тест последовательно: I am запускает их последовательно, но мое приложение использует много сетей, и для некоторых тестов требуется совместное взаимодействие нескольких экземпляров (я использую Docker для симуляции сети и netem
для получения своего рода реалистичных сценариев связи).
Вызовет ли одновременный запуск нескольких экземпляров одного исполняемого файла?Я могу себе представить, что если будет реализован какой-либо механизм блокировки, данные покрытия будут безопасно и атомарно записаны в файл .gcda
, и если другим исполняемым файлам потребуется выполнить дамп, они будут ждать, пока не будет снята блокировка.Однако я нигде не смог найти гарантию, что это действительно произойдет.