Debugversionen von Heapreservierungsfunktionen

Aktualisiert: November 2007

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

C++

Web Developer

Express

Nur "Systemeigen"

Standard

Nur "Systemeigen"

Pro und Team

Nur "Systemeigen"

Tabellenlegende:

Vorhanden

Nicht vorhanden

Befehl oder Befehle, die standardmäßig ausgeblendet sind.

Die C-Laufzeitbibliothek umfasst spezielle Debugversionen der Heapreservierungsfunktionen. Diese Funktionen haben dieselben Namen wie die Releaseversionen, gefolgt vom Suffix _dbg. In diesem Thema werden die Unterschiede zwischen der Releaseversion und der _dbg-Version einer CRT-Funktion beschrieben, wobei malloc und _malloc_dbg als Beispiele verwendet werden.

Wenn _DEBUG definiert wird, ordnet das CRT alle malloc-Aufrufe _malloc_dbg zu. Aus diesem Grund müssen Sie den Code nicht umschreiben, indem Sie malloc durch _malloc_dbg ersetzen, um die Vorteile beim Debuggen nutzen zu können.

Unter Umständen möchten Sie _malloc_dbg jedoch explizit aufrufen. Der explizite Aufruf von _malloc_dbg bietet zusätzliche Vorteile:

  • Nachverfolgen von _CLIENT_BLOCK-Reservierungen.

  • Speichern von Quelldatei und Zeilennummer an der Stelle, an der die Reservierung angefordert wurde.

Wenn Sie die malloc-Aufrufe nicht in _malloc_dbg-Aufrufe konvertieren möchten, erhalten Sie die Informationen zur Quelldatei auch durch die Definition von _CRTDBG_MAP_ALLOC. Dadurch werden alle malloc-Aufrufe vom Präprozessor direkt _malloc_dbg zugeordnet, sodass kein Wrapper für malloc erforderlich ist.

Um Reservierungstypen in Clientblöcken gesondert nachzuverfolgen, muss _malloc_dbg direkt aufgerufen und der blockType-Parameter auf _CLIENT_BLOCK festgelegt werden.

Wird _DEBUG nicht definiert, geschieht Folgendes: malloc-Aufrufe werden nicht behindert, _malloc_dbg-Aufrufe werden in malloc-Aufrufe aufgelöst, die Definition von _CRTDBG_MAP_ALLOC wird ignoriert, und es werden keine Quelldateiinformationen zur Reservierungsanforderung bereitgestellt. Da malloc keinen Blocktypparameter hat, werden _CLIENT_BLOCK-Anforderungen wie Standardreservierungen behandelt.

Siehe auch

Weitere Ressourcen

CRT-Debugverfahren