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 |
_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 |
_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