Должен ли я использовать Helgrind или DRD для обнаружения ошибок потока? - PullRequest
28 голосов
/ 16 ноября 2011

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

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

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

Ответы [ 4 ]

7 голосов
/ 24 ноября 2011

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

2 голосов
/ 27 февраля 2018

Если вы используете какие-либо примитивы синхронизации POSIX, кроме мьютексов (например, семафоры, барьеры, условные переменные и т. Д.), DRD стоит того, чтобы его использовать - он может выявить некоторые тонкие злоупотребления, которые Хелгринд не обнаруживает.

Тем не менее, DRD кажется гораздо более ресурсоемким, чем Helgrind (в моих прогонах, использующих 3.14.0, кажется, что загрузка ЦП огромна).

1 голос
/ 17 ноября 2011

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

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

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

0 голосов
/ 04 августа 2012

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

...