2012-02-07 6 views
7

Di solito scrivo le mie classi in C++ e controllo se perdono memoria usando valgrind su piattaforma Linux. Non sono soddisfatto finché non viene liberata tutta la memoria heap.File di soppressione per perdite di memoria Qt con Valgrind

Iniziare a scrivere in Qt, ho trovato quante perdite rileva valgrind, anche su un progetto semplice. Sono così tanti che è difficile rilevare le mie stesse perdite.

Ho letto da qualche parte che è possibile utilizzare un file di soppressione per valgrind che aiuta a filtrare le perdite indesiderate, ma non riesco a trovarlo.

Sto usando Ubuntu 11.04 x64, g ++ 4.5, Qt 4.7. Qualcuno sa come affrontare questo problema?

risposta

6

Hai guardato this "Valgrind Suppression File Howto" wiki?

Solo per la cronologia ci sono alcune librerie sottostanti in Qt (specialmente quelle nel processo di verniciatura) che perdono sempre una piccola quantità di memoria. Questi sono quelli che devi sopprimere.

Come hai detto, devi prima creare un progetto minimale, eseguirlo per creare un file di soppressione valgrind e quindi applicare il file di soppressione al tuo progetto.

+0

Grazie. Quindi dovrei prima creare un progetto minimale, eseguirlo per creare un file di soppressione valgrind e quindi applicare quel file di soppressione al mio progetto, giusto? – linello

+1

sì, è tutto. – UmNyobe

0

Basta fare attenzione che molte librerie dispongono di strutture di allocazione interne che non riuscirai mai a pulire, ed è normale.

+0

alcune delle tante fughe di notizie non hanno simboli a tutti! – linello

-1

I Just utilizzando il file di soppressione di sopprimere tutta la memoria segnalata dalla libreria Qt come questo:

{ 
     <QtCore> 
     Memcheck:Leak 
     ... 
     obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6 
    } 

... 
+0

Questa è una cattiva idea. Ho trovato degli errori nel mio codice in cui la nuova chiamata effettiva proviene da uno dei contenitori Qt (QHash), quindi se si sopprimono tutte le librerie Qt mancherà. –