2010-08-26 5 views
2

Quand je lance Valgrind sur mon code, je reçois plusieurs milliers de cas deComment réparer le problème de l'allocateur de pool valgrind?

12 bytes in 1 blocks are possibly lost in loss record 545 of 29,459 
    at 0x7FCC050: operator new(unsigned int) (vg_replace_malloc.c:214) 
    by 0x87E39B1: __gnu_cxx::new_allocator<T>::allocate(unsigned int, void const*) (new_allocator.h:89) 
    ... 
    ... 

De divers postes, j'ai pu déterminer que c'est « pas un bug, mais une caractéristique », car il est la façon dont gnu Les bibliothèques fournissent une allocation très efficace à la bibliothèque stl. Cela dit, en voyant plusieurs milliers d'entre eux, il est difficile de trouver de vrais insectes.

Comment puis-je configurer Valgrind pour ne pas afficher ces erreurs?

Note: J'ai essayé de définir des variables environnementales GLIBCXX_FORCE_NEW G_SLICE=always-malloc G_DEBUG=gc-friendly,resident-modules et rien n'a changé

+0

Quelle version de valgrind/gcc/libc/(et distro peut-être) utilisez-vous? Je n'ai jamais eu ces problèmes lors de la vérification de mon code C++. – BatchyX

+0

gcc version 3.4.2, valgrind 2.4.0, glibc 2.3.3-98.103.408.0.PTF.486631, SuSE Linux – user108088

+0

Ces versions sont sérieusement obsolètes. n'est-il pas possible de tester avec un logiciel plus récent? ceux-ci ont presque 5-7 ans. ce problème doit avoir été réparé depuis lors. – BatchyX

Répondre

1

Utilisez valgrind --gen-suppressions=yes pour générer des instructions de suppression pour les erreurs qu'il affiche. Vous pouvez ensuite réexécuter valgrind avec ces messages d'erreur supprimés à l'aide de --suppressions=<filename>.

+0

C'était aussi ma réponse maintenant supprimée :) Mais que reste-t-il de valgrind si vous supprimez opérateur nouveau? –

0

Avez-vous essayé les suggestions du Valgrind FAQ pour désactiver le pool d'alloc? Notez que la variable d'environnement change en fonction de la version de gcc utilisée.

+0

Si vous faites référence à GLIBCXX_FORCE_NEW, cela n'aide pas. Parlez-vous d'une autre façon de désactiver le pool d'alloc? – user108088

+0

Oui, cependant, après un examen plus approfondi, il semble qu'il y ait un bug gcc (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31777). Il existe une condition de concurrence potentielle où la variable utilisée pour forcer l'utilisation de new peut dépasser 1 et le test dans pool_allocator.h est pour == 1. Malheureusement, il ne semble pas que le correctif décrit dans ce bug ait été inclus dans toute version gcc. –