Debugversionen von Heapreservierungsfunktionen
Dieses Thema gilt für folgende Anwendungsbereiche:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Nur "Systemeigen" |
||||
Pro, Premium und Ultimate |
Nur "Systemeigen" |
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.