Verwenden der PHD-Klasse Isolieren von Speicherverlusten

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 194655 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Speicherlecks sind ein Problem in vielen Anwendungen. Eine konkrete Möglichkeit, Speicherverluste zu ermitteln ist die Verwendung die PHD Visual C++-Klasse, die in diesem Artikel bereitgestellt wird. Durch Protokollieren Speicherstatistik in einer Anwendung mithilfe der PHD-Klasse, erhalten Sie eine genauere Vorstellung davon, wo ein Speicherverlust auftritt.

Selbstextrahierende PHD.EXE ist ein Beispiel, die Verwendung von enthalten PHD um zu disprove Beweisen/einen Speicherverlust Klasse. Die PHD-Klasse ist ein thin Wrapper um die Leistung Hilfsfunktionen aus dem Windows NT Resource Kit. Dieser Code funktioniert nur unter Windows NT.

Weitere Informationen

Die folgenden Dateien stehen im Microsoft Download Center zum Download zur Verfügung:
Phd.exe
Freigabedatum: Oct-23-1998

Weitere Informationen zum Download von Microsoft Support-Dateien finden Sie in folgendem Artikel der Microsoft Knowledge Base:
119591So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit, wodurch nicht autorisierte Änderungen an der Datei weitestgehend verhindert werden.
Die folgenden wichtigen Dateien sind in dem Beispiel enthalten:
    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.
				

Schließen Sie die RKLeak.cpp-Datei in Ihrem Projekt, zum Verwenden der PHD-Klasse. Einschließlich der Header-Datei, verursacht Sie Bindung zu Bibliothek PDH.lib Lieferumfang von Visual C++ 6.0. Außerdem müssen Sie den Pfad die PHD.dll-Datei hinzufügen, damit es die Anwendung findet.

Die TestMain.cpp-Datei enthält das folgende Codebeispiel, das auf der PHD-Klasse veranschaulicht:

Beispielcode

   **************************************************
   #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);
      }

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

Die erste Verwendung des Konstruktors PHD können Sie die Elemente angeben, die Sie überwachen möchten. Diese sind die gleichen Elemente, die in die Anwendung Perfmon.exe verfügbar sind.

Die zweite Verwendung des Konstruktors PHD (keine Argumente) verwendet die folgende Spalte Standardprotokolle: private Bytes, Seite Datei Bytes, paged Pool Bytes Bytes nicht ausgelagerten pool, und Arbeitsseiten.

Wie Sie den Beispielcode entnehmen können, wird die PHD-Klasse wird um die verdächtige leaking-API in einer Schleife verwendet und in regelmäßigen Abständen Ruft die PHD::logData-Methode. Daten werden protokolliert in Datei mit Namen "< ihre name>_perf.log EXE" im aktuellen Verzeichnis. Wenn die resultierende Protokolldatei eine lineare Steigerung in privaten Bytes zeigt, impliziert dieser Anstieg keinen Speicherverlust in der API, sondern lediglich einen Speicherverlust in der Anwendung. Wenn die API (z. B. durch Freigeben von nicht korrekt von dem ersten Aufruf reservierten Ressourcen) falsch verwendet wird, werden die Ergebnisse nicht durch eine fehlerhafte-API nur einen Speicherverlust anzeigen. Um das Problem einzugrenzen, erstellen Sie die einfachste mögliche Anwendung, die die API testet fragliche.

Visual C++-5.x-Benutzer müssen die folgenden Zeilen aus RKLeak.h auskommentieren:
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Weitere Tools

Sie können im Web in der FAQ-Seiten Informationen zu verschiedenen Drittanbieter-Debugger suchen, mit denen Sie Speicherverluste suchen können. Die folgenden häufig gestellten Fragen erwähnt z. B. mehrere Produkte:
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
Hinweis: Die in diesem Artikel erwähnten Fremdanbieterprodukte werden von einem Lieferanten hergestellt, der von Microsoft unabhängig ist; Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte. Sie sollten außerdem beachten, dass diese Produkte können manchmal false Berichte Speicherverluste vornehmen, jedoch sind immer noch sehr nützliche Tools.

Darüber hinaus ist der Visual C++-Heap Debuggen API ein nützliches Tool zum Suchen von Speicherverlusten. Dazu gehören Funktionen, z. B. _CrtMemDifference() und _CrtMemDumpAllObjectsSince(), die in der Visual C++ Programmer's Guide im Abschnitt Funktionsreferenz Debuggen dokumentiert sind. Diese Funktionen erkennen nur Speicherverluste in Ihrem Code und nicht Speicherverluste in anderen Komponenten.

(c) 1998 Microsoft Corporation, alle Rechte vorbehalten. Beiträge von Rick Anderson, Microsoft Corporation.

Eigenschaften

Artikel-ID: 194655 - Geändert am: Samstag, 22. Februar 2014 - Version: 2.5
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 97 Service Pack 3
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 194655
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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