10
votes

VS2010 Profiler / Détection de fuite

Quelqu'un peut-il connaître un détecteur de profileur et de fuites qui fonctionnera avec le code VS2010? De préférence une qui fonctionne sur Win7.

J'ai cherché ici et dans Google. J'ai trouvé un détecteur de fuite qui fonctionne (validateur mémoire) mais je ne suis pas trop impressionné. Pour une chose, il montre une bouquet de fuites de menu et de choses que je suis assez confiante ne sont pas réelles. J'ai aussi essayé GlowCode mais c'est juste un profileur et refuse d'installer sur Win7.

J'utilisais AQTime. Il y avait tout ce dont j'avais besoin, la détection de la future de la mémoire / des ressources, le profilage de diverses choses, une analyse statique, etc. Malheureusement, il donne des résultats faux maintenant.

Mon problème immédiat principal est que VS2010 dit qu'il y a des fuites dans un programme qui n'en avait pas dans VS2005. Je suis presque certain que c'est de faux positifs, mais je ne peux pas sembler trouver un bon outil pour vérifier cela. Le validateur de la mémoire ne montre pas les mêmes et la déclaration de fuites de VS ne semble pas rationnelle.


1 commentaires

Peut-être que cela vaut la peine de procéder à une évaluation du studio parallèle d'Intel qui est disponible pour 32 et pour les plates-formes 64 bits.


6 Réponses :


1
votes

Personnellement, j'aime DevPartner . Si vous travaillez dans une grande entreprise, vous pouvez peut-être les convaincre de payer pour la licence lourde. C'est cher, mais c'est très très solide.


0 commentaires

0
votes

J'ai utilisé plusieurs alternatives commerciales et, bien qu'ils puissent obtenir des résultats fantastiques, ils ne manquent pas souvent de travailler à cause de raisons inconnues:

  • Quantité rationnelle: produit fantastique pour le profilage de la performance, mais ils n'ont pas réussi à libérer de nouvelles versions pendant plusieurs années et souvent (dans mon cas) le logiciel a souvent refusé de travailler
  • AQTime: également très bon (moins que rationnel Quantité) mais refuse également de travailler pour des raisons inconnues.
  • Validator Performance: Même

    Au cours des dernières années, je suis retourné à la manière assez brute d'échantillonner l'application. Ceci n'est pas aussi parfait que d'utiliser une instrumentation, mais c'est beaucoup plus rapide, peut être exécuté sur n'importe quelle application et fonctionne toujours. Mon préféré est "très somnolent" ( http://www.codersnotes.com/sleepy ) mais aussi Luke Stackwalker ( http://lukestackwalker.sourceforge.net/ ) est assez bon. Étant donné que les applications peuvent être exécutées immédiatement et sans ralentissement notable, la boucle "Change App, profil" est très courte et efficace.

    Pour trouver des fuites de mémoire, il existe plusieurs outils dans les fenêtres que vous pouvez utiliser. Encore une fois, ils sont loin d'être parfaits et ne peuvent souvent que rechercher des applications à l'extérieur, sans simplement signaler des fuites à la fin de la demande. Recherchez les "outils de débogage de Microsoft" (UMDH, LEAKDIAG, GFLAGS). Personnellement, je trouve qu'il est beaucoup plus facile d'écrire mon propre gestionnaire de mémoire et de le laisser signaler les fuites à la fin de l'application. Ce n'est pas si difficile à écrire. Ce que vous avez à faire est:

    • Implémentez les bons opérateurs de nouveaux et de suppression (je pense que vous devriez implémenter 4 nouveaux et 4 autres opérateurs de suppression)
    • Dans la mise en œuvre de la nouvelle, obtenez la pile d'appels (recherchez StackWalk) et stockez ceci avec la mémoire allouée.
    • Faites une classe qui démarre votre gestionnaire de mémoire dans le constructeur et signalez toutes les fuites (y compris la pile d'appels) dans le destructeur.
    • Faites une variable globale de ce type de classe. Il peut être nécessaire de faire une variable globale spéciale utilisant un #pragma (init_seg).

0 commentaires

3
votes

Pour trouver des fuites de mémoire, vous pouvez essayer Détection visuelle des fuites outil.


0 commentaires

0
votes

Il y a aussi de simples et faciles à utiliser le code de détection de fuites ici aussi: http: // www.codeproject.com/kb/cpp/memleakdetect.aspx


0 commentaires

0
votes

Vous ne savez pas comment créer un lien vers cela, que j'ai précédemment affiché en réponse à une question similaire:

Vous pouvez utiliser umdh.exe pour capturer et comparer des instantanés du processus avant et après que la fuite se produise. Cela fonctionne mieux avec les fichiers binaires de débogage, mais viable avec la libération des chemins de symboles fournis sont correctement définis - il vous donnera les appels de mémoire alloués entre le 1er et le 2e instantané.

http://support.microsoft.com/kb/268343

Cette approche a l'avantage d'être libre.


0 commentaires

3
votes

Noah, comme l'oriend mentionné, Devpartner Studio de Micro Focus a à la fois une détection de fuites et d'autres caractéristiques de profilage d'exécution. Contrairement aux hauts prix DPS DPS dans Compuware, vous pouvez désormais licencier uniquement les profileurs d'exécution et non toute la suite si c'est ce dont vous avez besoin. Fiche vergogne: je travaille sur l'équipe Devpartner. Nos navires de support d'application de 64 bits dans la version 10.5 Le 4 février 2011. Recherchez les nouvelles de la version et eval téléchargements sur http: // www.devpartner.com .


0 commentaires