2011-11-16 14 views
24

Parece que Valgrind tiene dos herramientas que hacen detección de error de hilo: Helgrind y DRD. Estas herramientas son sustancialmente similares.¿Debo usar Helgrind o DRD para la detección de errores de hilo?

Mi pregunta principal es: ¿cuándo debo usar una en lugar de la otra para verificar mi código de subprocesos múltiples?

En términos más generales, ¿por qué hay dos herramientas? Supongo que no son completamente redundantes. ¿Cuáles son las diferencias importantes? ¿Debo, en general, planear ejecutar mi código a través de ambas herramientas?

+0

Si no me equivoco, DRD es principalmente _newer_ que Helgrind. Buena pregunta, aunque – sehe

Respuesta

1

¿Cuándo debo usar uno en lugar de otro para verificar mi código de subprocesos múltiples?

Depende de lo que desea comprobar que codifican.

Para comprobar carreras de datos, es posible que desee utilizar ThreadSanitizer.
Comparison with DRD and others.

1

Otro punto a tener en cuenta: a partir de la versión 3.6.0 de valgrind, DRD admite pthread spinlocks, pero helgrind no. No he probado 3.7.0, pero las notas de la versión me llevan a creer que esto no ha cambiado.

+5

A partir de 3.5.0, helgrind admite pthread_spinlock: http://valgrind.org/docs/manual/dist.news.html – leecbaker

1

Si está utilizando cualquier primitiva de sincronización POSIX además de mutexes (por ejemplo, semáforos, barreras, variables de condición, etc.), DRD vale la pena correr: puede identificar algunos usos indebidos sutiles que Helgrind no detecta.

Sin embargo, DRD parece ser mucho más intensivo en recursos que Helgrind (en mis ejecuciones con 3.14.0 parece haber una tremenda cantidad de sobrecarga de CPU).

Cuestiones relacionadas