2012-02-07 17 views
7

Zwykle piszę swoje zajęcia w C++ i sprawdzam, czy nie przeciekają za pomocą pamięci Valgrind na platformie Linux. Nie jestem usatysfakcjonowany, dopóki cała pamięć sterty nie zostanie zwolniona.Pliki eliminujące wycieki pamięci Qt za pomocą Valgrind

Zaczynając pisać w Qt, stwierdziłem, ile wycieków wykrywa valgrind, również w prostym projekcie. Jest ich tak wiele, że trudno jest wykryć te same przecieki.

Czytałem gdzieś, że można użyć plików tłumienia dla valgrind, który pomaga odfiltrować niechciane wycieki, ale nie mogę go znaleźć.

Używam Ubuntu 11.04 x64, g ++ 4.5, Qt 4.7. Czy ktoś wie, jak poradzić sobie z tym problemem?

Odpowiedz

6

Czy patrzysz na this "Valgrind Suppression File Howto" wiki?

Dla pewności istnieją pewne podstawowe biblioteki w Qt (szczególnie te w procesie malowania), które zawsze wyciekają z niewielkiej ilości pamięci. Tych trzeba tłumić.

Tak jak powiedziałeś, powinieneś najpierw stworzyć minimalny projekt, uruchomić go, aby utworzyć plik tłumiący valgrind, a następnie zastosować ten plik tłumienia do projektu.

+0

Dziękuję. Tak więc powinienem najpierw stworzyć minimalny projekt, uruchomić go, aby utworzyć plik tłumiący valgrind, a następnie zastosować ten plik tłumienia do mojego projektu, prawda? – linello

+1

tak, to wszystko. – UmNyobe

0

Zwróć uwagę, że wiele bibliotek ma wewnętrzne struktury alokacji, do których nigdy nie dotrzesz, a to normalne.

+0

niektóre z wielu przecieków mają żadnych symboli w ogóle! – linello

-1

I Just użyciu pliku tłumienia tłumić całą pamięć zgłoszoną z biblioteki Qt tak:

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

... 
+0

To zły pomysł. Znalazłem błędy w moim własnym kodzie, w którym faktyczne nowe połączenie pochodzi z jednego z pojemników Qt (QHash), więc jeśli stłumisz wszystkie biblioteki Qt, przegapisz to. –

Powiązane problemy