non so di una bacchetta magica, ma ci riesco dai un'occhiata a valgrind/valgrind.h, ha alcune macro utili per rendere le cose di Valgrind consapevoli e alterare il loro comportamento viore se si corre sotto Valgrind.
Per esempio
#ifndef HAVE_VALGRIND_VALGRIND_H
#define RUNNING_ON_VALGRIND 0
#else
#include <valgrind/valgrind.h>
#endif
if (RUNNING_ON_VALGRIND) {
printf("Hello, this is Valgrind instance %d\n", RUNNING_ON_VALGRIND);
/* set debug output annoyingly high */
/* exit after one request */
}
È inoltre possibile racchiudere che tutto il casino con NDEBUG
per tenerlo fuori produzione costruisce.
Questo dovrebbe farti evitare di dover armeggiare con il server ogni volta che esegui il debug, lo farà "basta" se Valgrind viene rilevato. RUNNING_ON_VALGRIND si espande all'istanza di valgrind o rimane 0 se non applicabile.
Per il resto (e sto immaginando di avere un sacco di rumore, molto probabilmente a partire da invalid read of size xx
), è possibile applicare sistematicamente le soppressioni. Se pubblichi parte dell'output, potrebbe essere più semplice dare suggerimenti per le soppressioni che puoi incollare in un file.
Per inciso, mailing list dell'utente Valgrind è estremamente disponibile e molto tollerante. Puoi anche inviare il tuo rumore più fastidioso e irrilevante lì, riceverai risposte su come sopprimerlo piuttosto rapidamente.
Se quello che cercate è un riepilogo delle perdite e dei punti di ingresso che hanno portato a loro, non dovrebbe essere troppo difficile da arrestare quasi tutto il resto in su.
fonte
2010-02-16 08:36:56
Ho aggiunto l'output valgrind. Ci sono molte cose, alcune delle quali provengono dal mio modulo. –