Debugroutinen

Die Debugversion der C-Laufzeitbibliothek stellt viele Diagnosedienste bereit, die das Debuggen von Programmen vereinfachen und Entwicklern Folgendes ermöglichen:

  • Ausführen von einzelnen Schritten direkt in die Laufzeitfunktionen während des Debuggens

  • Beheben von Assertionen, Fehlern und Ausnahmen

  • Nachverfolgen von Heapzuordnungen und Verhindern von Speicherverlusten

  • Übermitteln von Debugmeldungen an den Benutzer

Debugversionen der C-Laufzeitbibliotheksroutinen

Um diese Routinen zu verwenden, muss das _DEBUG Flag definiert werden. Alle diese Routinen führen in einer Verkaufsversion einer Anwendung keine Aktionen aus. Weitere Informationen zur Verwendung der neuen Debugroutinen finden Sie unter CRT-Debuggingtechniken.

Routine Verwendung
_ASSERT Auswerten eines Ausdrucks und Generiert einen Debugbericht, wenn das Ergebnis ist FALSE
_ASSERTE Ähnlich wie _ASSERT, schließt jedoch den fehlgeschlagenen Ausdruck im generierten Bericht ein.
_CrtCheckMemory Bestätigt die Integrität der Speicherblöcke, die im Debugheap zugeordnet werden.
_CrtDbgBreak Legt einen Haltepunkt fest.
_CrtDbgReport, _CrtDbgReportW Generiert einen Debugbericht mit einer Benutzermeldung und sendet den Bericht an drei mögliche Ziele.
_CrtDoForAllClientObjects Ruft eine von der Anwendung bereitgestellte Funktion für alle _CLIENT_BLOCK-Typen auf dem Heap auf.
_CrtDumpMemoryLeaks Gibt alle Speicherblöcke im Debugheap aus, wenn ein bedeutender Speicherverlust aufgetreten ist.
_CrtIsMemoryBlock Überprüft, ob sich ein angegebener Speicherblock im lokalen Heap befindet und ob er einen gültigen Debugheap-Blocktypbezeichner hat.
_CrtIsValidHeapPointer Überprüft, ob sich ein angegebener Zeiger im lokalen Heap befindet.
_CrtIsValidPointer Überprüft, ob ein bestimmter Speicherbereich für Lese- und Schreibvorgänge gültig ist.
_CrtMemCheckpoint Ruft den aktuellen Zustand des Debugheaps ab und speichert ihn in einer von der Anwendung bereitgestellten _CrtMemState-Struktur.
_CrtMemDifference Vergleicht zwei Speicherzustände für wesentliche Unterschiede und gibt die Ergebnisse zurück.
_CrtMemDumpAllObjectsSince Gibt Informationen über Objekte auf dem Heap aus, seit ein angegebener Prüfpunkt übernommen wurde oder ab Beginn der Programmausführung.
_CrtMemDumpStatistics Gibt die Debugheaderinformationen für einen angegebenen Speicherzustand in einer für den Benutzer lesbaren Form aus.
_CrtReportBlockType Gibt den Blocktyp/den Untertyp zurück, der einem angegebenen Debugheapblockzeiger zugeordnet ist.
_CrtSetAllocHook Installiert eine clientdefinierte Zuordnungsfunktion, indem sie mit dem Debug-Speicherbelegungsprozess der C-Laufzeit verknüpft wird.
_CrtSetBreakAlloc Legt einen Haltepunkt an einer angegebenen Befehlsnummer der Objektzuordnung fest.
_CrtSetDbgFlag Ruft den Zustand des _crtDbgFlag-Flags ab oder ändert ihn, um das Zuordnungsverhalten des Debugheapmanagers zu steuern.
_CrtSetDumpClient Installiert eine anwendungsdefinierte Funktion, die bei jedem Aufruf einer Debugdumpfunktion aufgerufen wird, um _CLIENT_BLOCK-Typspeicherblöcke auszugeben.
_CrtSetReportFile Identifiziert die als Ziel für einen bestimmten Berichtstyp von _CrtDbgReport zu verwendende Datei bzw. Stream.
_CrtSetReportHook Installiert eine clientdefinierte Berichtsfunktion, indem sie mit dem Debug-Berichterstellungsprozess der C-Laufzeit verknüpft wird.
_CrtSetReportHook2, _CrtSetReportHookW2 Installiert bzw. deinstalliert eine clientdefinierte Berichtsfunktion, indem sie mit dem Debug-Berichterstellungsprozess der C-Laufzeit verknüpft wird.
_CrtSetReportMode Gibt die allgemeinen Ziele für einen bestimmten Berichtstyp an, der von _CrtDbgReport generiert wird.
_RPT[0,1,2,3,4] Verfolgt den Status der Anwendung durch Generieren eines Debugberichts, indem _CrtDbgReport mit einer Formatzeichenfolge und einer variablen Anzahl von Argumenten aufgerufen wird. Stellt keine Quelldatei und Zeilennummern bereit.
_RPTF[0,1,2,3,4] Ähnlich den _RPTn-Makros, jedoch werden der Quelldateiname und die Zeilennummer bereitgestellt, aus denen die Berichtsanforderung stammt.
_calloc_dbg Zuweisen einer angegebenen Anzahl von Speicherblöcken auf dem Heap mit zusätzlichem Speicherplatz für einen Debugheader und Überschreiben von Puffern
_expand_dbg Ändert die Größe eines angegebenen Speicherblocks auf dem Heap, indem der Block erweitert oder verkleinert wird.
_free_dbg Gibt einen Speicherblock auf dem Heap frei.
_fullpath_dbg, _wfullpath_dbg Erstellen Sie einen absoluten oder vollständigen Pfadnamen für den angegebenen relativen Pfadnamen, indem _malloc_dbg Sie Arbeitsspeicher zuweisen.
_getcwd_dbg, _wgetcwd_dbg Rufen Sie das aktuelle Arbeitsverzeichnis ab, indem _malloc_dbg Sie Arbeitsspeicher zuordnen.
_malloc_dbg Zuweisen eines Speicherblocks auf dem Heap mit zusätzlichem Speicherplatz für einen Debugheader und Überschreiben von Puffern
_msize_dbg Berechnet die Größe eines Speicherblocks auf dem Heap.
_realloc_dbg Ordnet einen angegebenen Speicherblock auf dem Heap neu zu, indem der Block verschoben und/oder seine Größe geändert wird.
_strdup_dbg, _wcsdup_dbg Dupliziert eine Zeichenfolge, die _malloc_dbg zum Zuweisen des Arbeitsspeichers verwendet wird.
_tempnam_dbg, _wtempnam_dbg Generieren Sie Namen, die Sie zum Erstellen temporärer Dateien verwenden können, indem _malloc_dbg Sie Arbeitsspeicher zuweisen.

C-Laufzeitroutinen, die im Quellcodeformular nicht verfügbar sind

Der Debugger kann verwendet werden, um den Quellcode für die meisten C-Laufzeitroutinen während des Debugprozesses schrittweise auszuführen. Microsoft betrachtet jedoch einige Technologien als proprietäre Und stellt daher nicht den Quellcode für eine Teilmenge dieser Routinen bereit. Die meisten dieser Routinen gehören zur Ausnahmebehandlung oder zu den Gruppen der Gleitkommaverarbeitung, einige andere werden jedoch ebenfalls eingeschlossen. In der folgenden Tabelle sind diese Routinen aufgeführt.

Obwohl Quellcode für die meisten der printf Und-Routinen scanf verfügbar ist, führen sie einen internen Aufruf an eine andere Routine durch, für die der Quellcode nicht bereitgestellt wird.

Routinen, die sich in einem Debugbuild einer Anwendung unterschiedlich verhalten

Einige C-Laufzeitfunktionen und C++-Operatoren verhalten sich unterschiedlich, wenn sie von einem Debugbuild einer Anwendung aufgerufen werden. (Sie können einen Debugbuild einer Anwendung erstellen, indem Sie entweder das _DEBUG Flag definieren oder eine Verknüpfung mit einer Debugversion der C-Laufzeitbibliothek herstellen.) Die Verhaltensunterschiede bestehen in der Regel aus zusätzlichen Features oder Informationen, die von der Routine zur Unterstützung des Debuggingprozesses bereitgestellt werden. In der folgenden Tabelle sind diese Routinen aufgeführt.

C-Routine abort

C-Routine assert

C++- delete Operator

C++- new Operator

Siehe auch

Universelle C-Laufzeitroutinen nach Kategorie
Laufzeitfehlerüberprüfung