Wersja debugowania funkcji alokacji sterty
Biblioteka środowiska uruchomieniowego języka C (CRT) zawiera specjalne wersje debugowania funkcji alokacji sterty. Te funkcje mają takie same nazwy jak wersje wydania z _dbg
dołączonym do nich. W tym artykule opisano różnice między wersją wydania funkcji CRT i _dbg
wersją, przy użyciu malloc
i _malloc_dbg
jako przykłady.
Zachowanie w kompilacjach debugowania
Po _DEBUG
zdefiniowaniu CRT mapuje wszystkie malloc
wywołania na _malloc_dbg
. W związku z malloc
tym nie trzeba ponownie pisać kodu przy użyciu _malloc_dbg
funkcji zamiast otrzymywać korzyści podczas debugowania.
Możesz jednak wywołać _malloc_dbg
jawnie. Wywołanie _malloc_dbg
jawnie ma pewne dodatkowe korzyści:
Alokacje typów śledzenia
_CLIENT_BLOCK
.Przechowywanie pliku źródłowego i numeru wiersza, w którym wystąpiło żądanie alokacji.
Jeśli nie chcesz konwertować malloc
wywołań na _malloc_dbg
, możesz uzyskać informacje o pliku źródłowym, definiując _CRTDBG_MAP_ALLOC
element , co powoduje, że preprocesor ma bezpośrednio mapować wszystkie wywołania na malloc
element _malloc_dbg
zamiast polegać na otoce wokół malloc
elementu .
Aby śledzić oddzielne typy alokacji w blokach klienta, należy wywołać _malloc_dbg
bezpośrednio i ustawić blockType
parametr na _CLIENT_BLOCK
.
Zachowanie w kompilacjach nie debugowania
Jeśli _DEBUG
nie jest zdefiniowana, wywołania nie malloc
są zakłócone, wywołania _malloc_dbg
do są rozpoznawane jako malloc
, definicja _CRTDBG_MAP_ALLOC
jest ignorowana, a informacje o pliku źródłowym odnoszące się do żądania alokacji nie są udostępniane. Ponieważ malloc
nie ma parametru typu bloku, żądania dla _CLIENT_BLOCK
typów są traktowane jako standardowe alokacje.