Должен ли я использовать Helgrind или DRD для обнаружения ошибок потока?
Похоже, Valgrind имеет два инструмента, которые оба обнаруживают ошибку потока: Helgrind и DRD. Эти инструменты практически одинаковы.
Мой основной вопрос: когда я должен использовать один вместо другого, чтобы проверить мой многопоточный код?
В более широком смысле, почему существуют два инструмента? Я предполагаю, что они не являются полностью избыточными. Каковы важные отличия? Должен ли я вообще планировать запуск моего кода с помощью обоих инструментов?
Ответы
Ответ 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, но примечания к выпуску побудили меня поверить, что это не изменилось.