Utilisation de la classe de bloc de tête d'impression pour isoler les fuites de mémoire

Traductions disponibles Traductions disponibles
Numéro d'article: 194655 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Fuites de mémoire sont un problème dans de nombreuses applications. Détermination des fuites de mémoire, un béton consiste à utiliser la classe de bloc de tête d'impression (PHD) de Visual C++ est fournie dans cet article. En ouvrant statistiques de la mémoire dans une application à l'aide de la classe de bloc de tête d'impression, vous pouvez obtenir une idée plus précise de dans lequel une fuite de mémoire se produit.

PHD.EXE auto-extractible est un exemple qui montre comment utiliser le bloc de tête d'impression (PHD) inclus pour prouver/disprove une fuite de mémoire de la classe. La classe de bloc de tête d'impression (PHD) est un wrapper mince dans les fonctions d'assistance performance à partir du kit de ressources Windows NT. Ce code fonctionne uniquement sous Windows NT.

Plus d'informations

Les fichiers suivants sont disponibles au téléchargement à partir du centre de téléchargement Microsoft :
Phd.exe
Date de publication: Octobre-23-1998

Pour plus d'informations sur la façon de télécharger des fichiers de support technique Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
119591Procédure pour obtenir des fichiers de support technique Microsoft auprès des services en ligne
Microsoft a analysé ce fichier pour les virus. Microsoft utilisé les logiciels de détection de virus les plus récentes ne sont associé à la date à laquelle le fichier a été validé. Le fichier est stocké sur des serveurs sécurisés, empêchant toute modification non autorisée du fichier.
Les fichiers clés suivants sont inclus dans l'échantillon :
    FileName                Description
    ---------------------------------------------------------
   PDH.dll                  Contains helper functions used by PHD.
   RKLeak.cpp               Contains the code for the PHD class.
   RKLeak.h                 Header file for the PHD class.
   TestMain.cpp             A simple program to demonstrate the PHD class.
				

Pour utiliser la classe de bloc de tête d'impression, inclure le fichier RKLeak.cpp dans votre projet. En incluant le fichier d'en-tête, vous provoquerez une liaison à la bibliothèque PDH.lib, qui est fourni avec le Visual C++ 6.0. Vous devez également ajouter le fichier PHD.dll à votre chemin d'accès afin que l'application se trouve.

Le fichier TestMain.cpp contient l'exemple de code suivant montre comment utiliser la classe de bloc de tête d'impression :

Exemple de code

   **************************************************
   #include "rkLeak.h"

   void main()
   {

      char *myCntrs[]={
         "\\Memory\\Available bytes",
         "\\Memory\\committed bytes",
         "\\Memory\\pool Paged bytes",
         "\\Memory\\pool Nonpaged bytes",
      };

      PHD mphd2(myCntrs,sizeof(myCntrs)/sizeof(myCntrs[0]));
      PHD mphd;

      const int arSize=4096;
      for (int i=0;i<5;i++){
         double *d = new double[arSize];
         d[0]= 1.;      d[arSize-1] = 2.;  // Force to committed mem.
         mphd.logData(i);
         mphd2.logData(i);
      }

   ***************************************************
				

La première utilisation du constructeur de bloc de tête d'impression vous permet de spécifier les éléments que vous souhaitez surveiller. Ce sont les éléments mêmes qui sont disponibles dans l'application Perfmon.exe.

La deuxième utilisation du constructeur faisant pivoter (sans argument) utilise les journaux de colonne par défaut suivants : octets privés, octets de fichier de page, octets de pool paginée, octets de réserve non paginée et travailler ensemble.

Comme vous pouvez le voir dans l'exemple de code, la classe de bloc de tête d'impression (PHD) est utilisée pour mettre l'API fuit suspectée dans une boucle et périodiquement appelle la méthode PHD::logData. Les données sont enregistrées dans fichier à l'aide de nom «< votre name>_perf.log EXE» dans le répertoire en cours. Si le fichier journal montre une augmentation linéaire en octets privés, cette augmentation n'implique pas une fuite de mémoire dans l'API, mais simplement une fuite de mémoire dans l'application. Si l'API est utilisé incorrectement (par exemple, en libérant n'est pas correctement les ressources allouées par l'appel initial), les résultats affichent uniquement une fuite de mémoire, et pas une API défectueuse. À cerner le problème, créez l'application possible la plus simple qui exerce l'API en question.

Les utilisateurs de Visual C++ 5.x doivent commenter les lignes suivantes à partir de RKLeak.h :
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Autres outils

Vous pouvez effectuer une recherche sur le Web dans les pages FAQ pour plus d'informations sur les différents débogueurs de tiers qui peuvent vous aider à trouver des fuites de mémoire. Par exemple, le Forum aux questions suivant mentionne plusieurs produits :
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
Remarque Les produits tiers mentionnés dans cet article sont fabriqués par des fournisseurs indépendants de Microsoft ; nous n'offrons aucune garantie, implicite ou autre, en ce qui concerne les performances et la fiabilité de ces produits. Notez également que parfois ces produits peuvent effectuer faux rapports de fuites, mais ils sont toujours des outils très utiles.

En outre, le tas Visual C++, API de débogage est un outil utile pour la localisation des fuites. Notamment, les fonctions, telles que _CrtMemDifference() et _CrtMemDumpAllObjectsSince(), qui sont documentés dans le Guide du programmeur Visual C++ dans la section référence des fonctions de débogage. Ces fonctions détectent uniquement les fuites dans votre code et non les fuites dans d'autres composants.

(c) 1998 Microsoft Corporation, tous droits réservés. Contribution de Rick Anderson, Microsoft Corporation.

Propriétés

Numéro d'article: 194655 - Dernière mise à jour: samedi 22 février 2014 - Version: 2.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 97 Service Pack 3
  • Microsoft Visual C++ 5.0 Édition Professionnelle
  • Microsoft Visual C++ 6.0 Édition Professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Mots-clés : 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 194655
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com