Подтвердить что ты не робот

Должен ли я использовать Helgrind или DRD для обнаружения ошибок потока?

Похоже, Valgrind имеет два инструмента, которые оба обнаруживают ошибку потока: Helgrind и DRD. Эти инструменты практически одинаковы.

Мой основной вопрос: когда я должен использовать один вместо другого, чтобы проверить мой многопоточный код?

В более широком смысле, почему существуют два инструмента? Я предполагаю, что они не являются полностью избыточными. Каковы важные отличия? Должен ли я вообще планировать запуск моего кода с помощью обоих инструментов?

4b9b3361

Ответ 1

Хотя Helgrind может обнаруживать нарушения порядка блокировки, для большинства программ DRD требуется меньше памяти для выполнения анализа. Кроме того, DRD поддерживает отдельные потоки. Есть и более тонкие различия - сравните соответствующие руководства, если хотите узнать больше. См. Также http://valgrind.org/docs/manual/hg-manual.html и http://valgrind.org/docs/manual/drd-manual.html.

Ответ 2

когда я должен использовать один вместо другого, чтобы проверить мой многопоточный код?

Зависит от того, что вы хотите проверить для этого кода.

Чтобы проверить расы данных, вы можете использовать ThreadSanitizer.
Сравнение с DRD и другими.

Ответ 3

Еще один момент для рассмотрения: по версии valgrind 3.6.0, DRD поддерживает зависания pthread, но helgrind этого не делает. Я не пробовал 3.7.0, но примечания к выпуску побудили меня поверить, что это не изменилось.