#c #multithreading #templates #code-coverage #gcov
#c #многопоточность #шаблоны #покрытие кода #gcov
Вопрос:
Я использовал gcov для тестирования покрытия кода, но когда дело доходит до шаблонного кода c , он работает не так хорошо. Я широко использую boost:: spirit, а gcov, похоже, просто игнорирует шаблонный код spirit.
Также мне интересно, есть ли инструмент покрытия, чтобы показать, как потоки взаимодействуют друг с другом, точно определяя возможные ветви / условия гонки / фактически выполняемые потоки выполнения.
Комментарии:
1. @Tomalakgeret’kal: покрытие кода?
2. @Tomalakgeret’kal тестирование покрытия кода
3. Существует множество шаблонного кода, который оценивается во время компиляции. Что означает «покрытие кода» для этого? Нормальное покрытие кода определяется во время выполнения.
4. @MSalters: Я бы предположил, что покрытие кода для части времени выполнения, но я никогда не видел инструмента, который указывал бы это для каждого экземпляра шаблона. Я предполагаю, что есть проблема с встраиванием…
Ответ №1:
TestCocoon — отличный инструмент, который стоит попробовать, лучше, чем gcov, с хорошими инструментами и возможностями создания отчетов. Поскольку шаблоны — звери времени компиляции, я не уверен, какую информацию о покрытии вы хотите получить?
мои два цента
Комментарии:
1. Хорошим также является Testwell CTC , он имеет хорошие отчеты в формате HTML, поддерживает все компиляторы и работает с любой целью embeed.
2. @B_PRIEUR: Я этого не знаю. testcocoon в то время был бесплатным. Я не знаю продукт Testwell, но кажется профессиональным. Добавьте его в ответ…
3. Да, он профессиональный, я не думаю, что он добавляет так много информации, а модераторам не очень нравятся ответы на инструменты: p
Ответ №2:
Я работаю над большим продуктом, и мы использовали стороннее приложение под названием BullsEye для тестирования покрытия. Это творило чудеса.
Ответ №3:
Наш инструмент для покрытия тестов C обеспечивает тестовое покрытие для тел шаблонов или, по крайней мере, для тех шаблонов, которые определены в файлах, которые вы указываете для его покрытия.
Он не различает экземпляры шаблонов.
Если у вас многопоточное приложение, инструмент будет записывать ветви, выполняемые всеми потоками, если вы настроили инструмент на использование флагов, доступных для записи атомарно (обычно это естественный размер слова процессора [32 или 64 бита]. (Если вы этого не сделаете, вы можете столкнуться с гонкой потоков при обновлении флагов покрытия, и вы можете потерять немного покрытия. Это не дефект инструмента; это следствие несинхронизированного доступа к хранилищу, содержащему пробные данные.)
Для обнаружения гонки OP необходимо найти средство обнаружения гонки; инструменты тестового покрытия этого не сделают.
Ответ №4:
Средство проверки покрытия C предоставляет данные покрытия для шаблонов.
Покрытие кода отслеживается для всех потоков.
Ответ №5:
Parasoft CPP test — хороший инструмент для различного анализа, включая покрытие кода и статический анализ. Это также полезно для изучения многопоточности.
http://www.parasoft.com/jsp/products/cpptest.jsp
Вот 10 хороших инструментов open soure для покрытия кода :
https://web.archive.org/web/20181018002302/http://open-tube.com/10-code-coverage-tools-c-c/