Procedury debugowania

Wersja debugowania biblioteki środowiska uruchomieniowego języka C udostępnia wiele usług diagnostycznych, które ułatwiają debugowanie programów i umożliwiają deweloperom:

  • Przechodzenie bezpośrednio do funkcji czasu wykonywania podczas debugowania

  • Rozwiązywanie asercji, błędów i wyjątków

  • Śledzenie alokacji sterty i zapobieganie wyciekom pamięci

  • Zgłaszanie komunikatów debugowania do użytkownika

Debugowanie wersji procedur biblioteki środowiska uruchomieniowego języka C

Aby użyć tych procedur, należy zdefiniować flagę _DEBUG . Wszystkie te procedury nie robią nic w kompilacji detalicznej aplikacji. Aby uzyskać więcej informacji na temat używania nowych procedur debugowania, zobacz Techniki debugowania CRT.

Procedura Używanie
_ASSERT Ocenianie wyrażenia i generowanie raportu debugowania, gdy wynik jest FALSE
_ASSERTE Podobne do _ASSERT, ale zawiera wyrażenie, które zakończyło się niepowodzeniem w wygenerowanym raporcie
_CrtCheckMemory Potwierdzanie integralności bloków pamięci przydzielonych na stercie debugowania
_CrtDbgBreak Ustawia punkt przerwania.
_CrtDbgReport, _CrtDbgReportW Generowanie raportu debugowania z komunikatem użytkownika i wysyłanie raportu do trzech możliwych miejsc docelowych
_CrtDoForAllClientObjects Wywoływanie funkcji dostarczonej przez aplikację dla wszystkich _CLIENT_BLOCK typów na stercie
_CrtDumpMemoryLeaks Zrzuć wszystkie bloki pamięci na stercie debugowania po wystąpieniu znacznego przecieku pamięci
_CrtIsMemoryBlock Sprawdź, czy określony blok pamięci znajduje się w stosie lokalnym i czy ma prawidłowy identyfikator typu bloku stert debugowania
_CrtIsValidHeapPointer Sprawdza, czy określony wskaźnik znajduje się w stercie lokalnym
_CrtIsValidPointer Sprawdź, czy określony zakres pamięci jest prawidłowy do odczytu i zapisu
_CrtMemCheckpoint Uzyskiwanie bieżącego stanu sterta debugowania i przechowywanie go w strukturze dostarczonej _CrtMemState przez aplikację
_CrtMemDifference Porównanie dwóch stanów pamięci dla znaczących różnic i zwracanie wyników
_CrtMemDumpAllObjectsSince Zrzut informacji o obiektach na stercie, ponieważ został pobrany określony punkt kontrolny lub od początku wykonywania programu
_CrtMemDumpStatistics Zrzut informacji nagłówka debugowania dla określonego stanu pamięci w formularzu czytelnym dla użytkownika
_CrtReportBlockType Zwraca typ/podtyp bloku skojarzony z danym wskaźnikiem bloku stert debugowania.
_CrtSetAllocHook Zainstaluj funkcję alokacji zdefiniowaną przez klienta, podłączając ją do procesu alokacji pamięci debugowania w czasie wykonywania języka C
_CrtSetBreakAlloc Ustawianie punktu przerwania dla określonego numeru zamówienia alokacji obiektu
_CrtSetDbgFlag Pobieranie lub modyfikowanie stanu _crtDbgFlag flagi w celu kontrolowania zachowania alokacji menedżera sterty debugowania
_CrtSetDumpClient Instalowanie funkcji zdefiniowanej przez aplikację, która jest wywoływana za każdym razem, gdy funkcja zrzutu debugowania jest wywoływana w celu zrzutu bloków pamięci typu zrzutu _CLIENT_BLOCK
_CrtSetReportFile Zidentyfikuj plik lub strumień, który ma być używany jako miejsce docelowe dla określonego typu raportu _CrtDbgReport
_CrtSetReportHook Zainstaluj funkcję raportowania zdefiniowaną przez klienta, podłączając ją do procesu raportowania debugowania w czasie wykonywania języka C
_CrtSetReportHook2, _CrtSetReportHookW2 Instaluje lub odinstalowuje funkcję raportowania zdefiniowaną przez klienta, podłączając ją do procesu raportowania debugowania w czasie wykonywania języka C.
_CrtSetReportMode Określanie ogólnych miejsc docelowych dla określonego typu raportu wygenerowanego przez _CrtDbgReport
_RPT[0,1,2,3,4] Śledź postęp aplikacji, generując raport debugowania, wywołując _CrtDbgReport ciąg formatu i zmienną liczbę argumentów. Nie zawiera informacji o pliku źródłowym i numerze wiersza.
_RPTF[0,1,2,3,4] Podobnie jak w _RPTn makrach, ale zawiera nazwę pliku źródłowego i numer wiersza, w którym pochodzi żądanie raportu
_calloc_dbg Przydziel określoną liczbę bloków pamięci na stercie z dodatkowym miejscem na nagłówek debugowania i zastąp bufory
_expand_dbg Zmienianie rozmiaru określonego bloku pamięci na stercie przez rozszerzenie lub zakontraktowanie bloku
_free_dbg Zwolnij blok pamięci na stercie
_fullpath_dbg, _wfullpath_dbg Utwórz bezwzględną lub pełną nazwę ścieżki dla określonej nazwy ścieżki względnej, używając polecenia _malloc_dbg w celu przydzielenia pamięci.
_getcwd_dbg, _wgetcwd_dbg Pobierz bieżący katalog roboczy przy użyciu polecenia _malloc_dbg w celu przydzielenia pamięci.
_malloc_dbg Przydziel blok pamięci na stercie z dodatkowym miejscem na nagłówek debugowania i zastąp bufory
_msize_dbg Obliczanie rozmiaru bloku pamięci na stercie
_realloc_dbg Ponowne przydzielanie określonego bloku pamięci na stercie przez przeniesienie i/lub zmianę rozmiaru bloku
_strdup_dbg, _wcsdup_dbg Duplikuje ciąg przy użyciu metody _malloc_dbg w celu przydzielenia pamięci.
_tempnam_dbg, _wtempnam_dbg Wygeneruj nazwy, których można użyć do tworzenia plików tymczasowych, przy użyciu polecenia _malloc_dbg w celu przydzielenia pamięci.

Procedury środowiska uruchomieniowego języka C, które nie są dostępne w formularzu kodu źródłowego

Debuger może służyć do przechodzenia przez kod źródłowy dla większości procedur środowiska uruchomieniowego języka C podczas procesu debugowania. Firma Microsoft uważa jednak, że niektóre technologie są zastrzeżone i dlatego nie udostępnia kodu źródłowego dla podzbioru tych procedur. Większość tych procedur należy do grup przetwarzania wyjątków lub przetwarzania zmiennoprzecinkowego, ale również kilka innych. W poniższej tabeli wymieniono te procedury.

Mimo że kod źródłowy jest dostępny dla większości printf procedur i scanf , wykonuje wywołanie wewnętrzne do innej procedury, dla której nie podano kodu źródłowego.

Procedury, które zachowują się inaczej w kompilacji debugowania aplikacji

Niektóre funkcje czasu wykonywania języka C i operatory języka C++ zachowują się inaczej, gdy są wywoływane z kompilacji debugowania aplikacji. (Możesz utworzyć kompilację debugowania aplikacji, definiując _DEBUG flagę lub łącząc ją z wersją debugowania biblioteki czasu wykonywania języka C). Różnice behawioralne zwykle składają się z dodatkowych funkcji lub informacji dostarczonych przez procedurę do obsługi procesu debugowania. W poniższej tabeli wymieniono te procedury.

Rutyna języka C abort

Rutyna języka C assert

Operator języka C++ delete

Operator języka C++ new

Zobacz też

Procedury czasu wykonywania języka Universal C według kategorii
Sprawdzanie błędów w czasie wykonywania