¿Debo usar Helgrind o DRD para la detección de errores de hilo?


Parece que Valgrind tiene dos herramientas que hacen detección de errores de hilo: Helgrind y DRD. Estas herramientas son sustancialmente similares.

Mi pregunta principal es: ¿cuándo debo usar uno en lugar del otro para verificar mi código multihilo?

Más ampliamente, ¿por qué hay dos herramientas? Supongo que no son totalmente redundantes. ¿Cuáles son las diferencias importantes? ¿Debería generalmente planear ejecutar mi código a través de ambas herramientas?

Author: Jeff Terrell Ph.D., 2011-11-16

4 answers

Mientras que Helgrind puede detectar violaciones de orden de bloqueo, para la mayoría de los programas DRD necesita menos memoria para realizar su análisis. Además, DRD tiene soporte para hilos separados. También hay diferencias más sutiles: compare los respectivos manuales si desea saber más. Ver también http://valgrind.org/docs/manual/hg-manual.html y http://valgrind.org/docs/manual/drd-manual.html.

 7
Author: Bart Van Assche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-24 19:47:42

Si está utilizando primitivas de sincronización POSIX además de mutexes (por ejemplo, semáforos, barreras, variables de condición, etc.), DRD vale la pena una carrera can 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 carreras usando 3.14.0 parece haber una tremenda cantidad de sobrecarga de CPU).

 2
Author: jhfrontz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-27 16:44:28

¿Cuándo debo usar uno en lugar del otro para verificar mi código multihilo?

Depende de para qué desea verificar ese código.

Para comprobar las carreras de datos, es posible que desee utilizar ThreadSanitizer.
Comparación con DRD y otros.

 1
Author: Employed Russian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-17 05:51:20

Otro punto a considerar: a partir de valgrind versión 3.6.0, DRD soporta 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.

 0
Author: BD at Rivenhill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-03 21:50:17