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 | Zweck |
---|---|
_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