Udostępnij za pośrednictwem


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_ALLOCelement , co powoduje, że preprocesor ma bezpośrednio mapować wszystkie wywołania na malloc element _malloc_dbg zamiast polegać na otoce wokół mallocelementu .

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.

Zobacz też

Techniki debugowania CRT