Artikel-ID: 151585 - Geändert am: Freitag, 30. September 2005 - Version: 3.0

Wie Sie _crtBreakAlloc verwenden, um eine Speicherzuordnung Debuggen

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.
Alles erweitern | Alles schließen

Zusammenfassung

Wenn Aufspüren Speicherverluste mithilfe der Debug-C-Laufzeit (CRT), es ist oft sinnvoll, die unmittelbar vor dem Reservieren von Speicher, der den Verlust verursacht einen Haltepunkt festlegen. Durch Festlegen _crtBreakAlloc auf Kompilierzeit oder zur Laufzeit können Sie einen benutzerdefinierten Haltepunkt zu einem bestimmten Zeitpunkt Speicherreservierung verursachen.

Weitere Informationen

Nachverfolgen von Speicher mit Debug-CRT-Funktionen wie z. B. _CrtDumpMemoryLeaks, Speicherverlusten wird eine Zuordnung Anzahl häufig in geschweiften Klammern ({}) eingeschlossen angezeigt. Der folgende Code ist z. B. ein Speicherverlust bei Zuweisung Nummer 18:
   Detected memory leaks!
   Dumping objects ->
   {18} normal block at 0x00660BE4, 10 bytes long
   Data: <          > CD CD CD CD CD CD CD CD CD CD
   Object dump complete.
					
Es ist sinnvoll, einen Haltepunkt rechts festlegen, bevor dieser Speicher reserviert ruft, so Sie können Schritt über die Aufrufliste und finden Sie unter welche Funktionen dieser Speicher zugewiesen erhalten verursachen. Die Debug-CRT-Funktion _CrtSetBreakAlloc, mit der Festlegung einer Zuordnung Anzahl an dem unterbrechen können. Diese Methode erfordert neu kompilieren Ihr Programm jedes Mal Sie, auf einen Haltepunkt Zuordnung festlegen möchten. Eine alternative Methode besteht im Überwachungsfenster verwenden und den Zuweisung Haltepunkt dynamisch festlegen. Diese Methode hat den Vorteil, nicht Source Codeänderungen erfordern oder neu zu kompilieren.

Wenn Sie statisch mit der C Runtime verknüpfen, wird die Variable, die Sie ändern möchten, _crtBreakAlloc aufgerufen. Wenn Sie dynamisch mit der C Runtime verknüpfen, die Variable möchten Sie ändern in das Fenster ist überwachen {,, msvcr40d.dll} * __p__crtBreakAlloc (), wenn Sie Visual C++ 4.0 oder 4.1 verwenden. Die Variable in geändert werden soll die Überwachung Fenster sein sollte {,, msvcrtd.dll}*__p__crtBreakAlloc(), wenn Sie Visual C++ 4.2 oder höher verwenden.

So ermitteln, welche Version der CRT Sie mit kompilieren:
  1. Wählen Sie im Menü Erstellen Einstellungen.
  2. In den Einstellungen für: Bereich wählen die Konfiguration für die Sie erstellen. Wählen Sie die Registerkarte c/c++, und wählen Sie dann die Codegenerierung Kategorie.
Run-time Bibliothek-Dialogfeld angezeigt werden soll die Version der CRT anzeigen verwenden Sie verwenden. (Wenn diese Einstellung leer ist, sicherzustellen, dass nur auf die Einstellungen für eine Konfiguration ausgewählt haben: Bereich.)

Legen Sie einen Zuweisung Haltepunkt dynamisch führen Sie die folgenden Schritte aus:
  1. Starten Sie die Debugsitzung. Wählen Sie im Build Debuggen-> Einzelschritt aus. Wenn Sie die "Debuggen Singlethreaded" oder "Debuggen Multi-Threaded CRT" verwenden, führen Sie die Schritt 1a. Führen Sie andernfalls Schritt 1 b.

    1. Geben Sie _crtBreakAlloc in das Überwachungsfenster. Dies zeigt die aktuelle Zuordnung-Zahl an der das Programm beendet wird. Diese Zuordnung Anzahl sollte-1 sein, beim ersten des Programms Start.
    2. Typ {,, msvcr40d.dll}*__p__crtBreakAlloc() im Fenster Überwachen, wenn Sie Visual C++ 4.0 oder 4.1 verwenden. Typ {,, msvcrtd.dll}*__p__crtBreakAlloc(), wenn Sie Visual C++ 4.2 oder höher verwenden. Dies zeigt die aktuelle Zuordnung-Zahl an der das Programm beendet wird. Diese Zuordnung Anzahl sollte-1 sein, beim ersten des Programms Start.
  2. Doppelklicken Sie auf den Wert-1, und geben Sie die neue Zuordnung-Nummer, die einen benutzerdefinierten Haltepunkt verursacht.
  3. Im Menü Debuggen wählen Sie Debuggen-> OK aus.
Weitere Informationen zu _crtBreakAlloc finden Sie auf "Überwachung Heap Allocation Requests" in der Hilfe.

Die Informationen in diesem Artikel beziehen sich auf:
  • The Integrated Debugger, wenn verwendet mit:
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Keywords: 
kbmt kbbug kbcrt kbdebug kbhowto kbide KB151585 KbMtde
Maschinell übersetzter ArtikelMaschinell ü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: 151585  (http://support.microsoft.com/kb/151585/en-us/ )
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.