2011-11-16 3 views
24

Sembra che Valgrind disponga di due strumenti che eseguono entrambi il rilevamento degli errori di thread: Helgrind e DRD. Questi strumenti sono sostanzialmente simili.Devo usare Helgrind o DRD per il rilevamento degli errori del filo?

La mia domanda principale è: quando dovrei usare uno anziché l'altro per controllare il mio codice multi-thread?

Più in generale, perché ci sono due strumenti? Presumo che non siano completamente ridondanti. Quali sono le differenze importanti? Dovrei in genere pianificare l'esecuzione del mio codice tramite entrambi gli strumenti?

+0

Se non sbaglio, DRD è principalmente _newer_ di Helgrind. Bella domanda, anche se – sehe

risposta

1

quando è necessario utilizzare uno anziché l'altro per verificare il mio codice multi-thread?

Dependance su quale si desidera verificare tale codice per.

Per verificare la presenza di dati, è possibile utilizzare ThreadSanitizer.
Comparison with DRD and others.

1

Un altro punto da considerare: a partire dalla versione 3.6.0 di valgrind, DRD supporta spinlock pthread, ma helgrind no. Non ho provato 3.7.0, ma le note di rilascio mi portano a credere che questo non sia cambiato.

+5

A partire dalla 3.5.0, helgrind supporta pthread_spinlock: http://valgrind.org/docs/manual/dist.news.html – leecbaker

1

Se si utilizzano primitive di sincronizzazione POSIX oltre a mutex (ad es. Semafori, barriere, variabili di condizione, ecc.), DRD vale la corsa - è in grado di identificare alcuni sottili abusi che Helgrind non rileva.

Tuttavia, DRD sembra essere molto più dispendioso di risorse rispetto a Helgrind (nelle mie esecuzioni con 3.14.0 sembra esserci un'enorme quantità di sovraccarico della CPU).