6
votes

Débogu Heap / STL Débogage équivalent pour GCC?

Je prévois d'utiliser GCC plus (Linux et Windows) et je me demandais s'il y a un équivalent du msvc tas de débogage et le STL vérifie Disponible pour le CRC et STL GCC.

Je connais déjà des outils tels que Valgrind, mais je cherche quelque chose construit dans les bibliothèques.


0 commentaires

5 Réponses :


3
votes

3 commentaires

Merci Neil. Je préférerais vraiment ne pas remplacer la STL, car j'utilise des bibliothèques tierces construites avec la STL "standard".


Malheureusement, vous devrez utiliser un ensemble différent de conteneurs STL pour obtenir la prise en charge d'une STL de débogage, même si vous utilisez une implémentation de la bibliothèque provenant du même fournisseur que votre bibliothèque ordinaire vient. Je suis à peu près sûr qu'il n'y a pas vraiment de "débogage stl" là où l'objet ne change pas leur mise en page si vous utilisez la version de débogage. Donc, je vais devoir aller et reconstruire tous les composants avec la même version de la bibliothèque et les mêmes drapeaux de toute façon.


Autant que je sache, MSVC dispose des fonctionnalités de débogage STL sur par défaut, de sorte que la version de débogage d'une bibliothèque utilisant la STL utilisera les fonctionnalités de débogage (en supposant qu'ils ne les éteignent pas explicitement - ce qui rendrait la liberté de la liberté. Projets MSVC par défaut). Je pourrais faire un effort et reconstruire, mais j'aimerais toujours utiliser la STL classique si possible.



3
votes

Je ne les ai jamais utilisées, mais je sais que glibc a des capacités pour faire du débogage de la mémoire allouée dynamiquement. Voici une entrée manuelle pertinente http://www.gnu.org/s/libc/manual/html_node/memory-allocument.html#memory-allocation . "Allocation non contrainte" a des informations de différentes manières de crocérer les fonctions d'allocation et de «débogage de répartition» contenant certaines informations sur les allocations de trace de Glibc.

Personnellement, je pense que Valgrind est le moyen le plus simple de le faire.


0 commentaires

8
votes

Je ne suis pas trop familier avec le tas de débogage et les chèques STL, mais lorsque j'ai des problèmes de mémoire dans GCC sur Linux, j'utilise une variable d'environnement appelée Malloc_Check_ (à partir de MALLOC (3)):

Les versions récentes de Linux Libc (plus tard 5.4.23) et GNU libc (2.x) incluent un MALLOC Mise en œuvre pouvant être corrigée via des variables d'environnement. Lorsque Malloc_check_ est défini, une implémentation spéciale (moins efficace) est utilisée qui est utilisée. conçu pour être tolérant contre de simples erreurs, telles que deux appels de libre () avec le même argument ou les dépassements d'un octet unique (bogues obsolètes). Pas tout De telles erreurs peuvent toutefois être protégées et les fuites de mémoire peuvent en résulter. Si Malloc_check_ est défini sur 0, tout cas de corruption du tas détecté est ignoré silencieusement; si Définissez sur 1, un diagnostic est imprimé sur stardr; Si défini sur 2, Abort () est appelé immédiatement. Cela peut être utile car sinon un crash peut arriver beaucoup plus tard, et la vraie cause du problème est alors très difficile de suivre.

Il y a aussi une clôture électrique qui peut aider à attraper des dépassements tampons à avorter dès que le dépassement / le sous-milieu se produit. Voir libefence (3) pour plus d'informations.


3 commentaires

C'est exactement ce que le tas de débogage fait Peter, merci! Savez-vous si ces chèques sont également effectués pour les nouveaux / Supprimer?


Il fait dans ma mise en œuvre (l'opérateur Supprimer, au moins, semble avoir un appel sous-jacent à GRATUIT (), de sorte qu'il attrape le double sans libération). La clôture électrique attrape définitivement des dépassements de tampon avec une mémoire allouée par l'opérateur neuf.


Notez que GLIBC 2.10 et 2.11 sont buggy: Malloc_Check_ peut provoquer des programmes multi-filetés de suspension et de crash.



3
votes

Certains débogage du tas sont disponibles avec l'intellence / Duma (même sous Mingw)


0 commentaires

2
votes

Ce que vous cherchez peut être activé en définissant _glibcxx_debug avant d'inclure des bibliothèques standard. Je ne sais pas ce qui affecte cela aura si vous ne pouvez pas l'utiliser de manière cohérente. Mon conseil par défaut serait d'être très prudent. J'ai également entendu dire que les chèques de débogage peuvent être un succès de performances. Si gros qu'il peut être imprudent de toujours l'avoir activé pour les constructions de débogage.


0 commentaires