Routine di debug

La versione di debug della libreria di runtime C offre numerosi servizi diagnostici che semplificano il debug dei programmi e consentono agli sviluppatori di:

  • Accedere direttamente alle funzioni di runtime durante il debug

  • Risolvere asserzioni, errori ed eccezioni

  • Tenere traccia delle allocazioni di heap e impedire perdite di memoria

  • Segnalare i messaggi di debug all'utente

    Per usare queste routine, il flag _DEBUG deve essere definito. Tutte queste routine non eseguono alcuna operazione nella versione finale di un'applicazione. Per altre informazioni sull'uso delle nuove routine di debug, vedere Tecniche di debug CRT.

Versioni di debug delle routine della libreria di runtime C

Routine Uso
_ASSERT Valutare un'espressione e generare un report di debug quando il risultato è FALSE
_ASSERTE Simile a _ASSERT, ma include l'espressione non riuscita nel report generato
_CrtCheckMemory Confermare l'integrità dei blocchi di memoria allocati nell'heap di debug
_CrtDbgBreak Imposta un punto di interruzione.
_CrtDbgReport, _CrtDbgReportW Generano un report di debug con un messaggio per l'utente e lo inviano a tre possibili destinazioni
_CrtDoForAllClientObjects Chiamare una funzione specificata dall'applicazione per tutti i tipi di _CLIENT_BLOCK nell'heap
_CrtDumpMemoryLeaks Dump di tutti i blocchi di memoria nell'heap di debug quando si verifica una consistente perdita di memoria
_CrtIsMemoryBlock Verificare che un blocco di memoria specificato si trovi nell'heap locale e che abbia un identificatore di tipo blocco dell'heap di debug valido
_CrtIsValidHeapPointer Verifica se un puntatore specificato è nell'heap locale
_CrtIsValidPointer Verificare che l'intervallo di memoria specificato sia valido per lettura e scrittura
_CrtMemCheckpoint Ottenere lo stato corrente dell'heap di debug e memorizzarlo in una struttura _CrtMemState specificata dall'applicazione
_CrtMemDifference Confrontare due stati della memoria per verificare la presenza di differenze significative e restituire i risultati
_CrtMemDumpAllObjectsSince Dump delle informazioni sugli oggetti nell'heap dal momento in cui è stato acquisito un checkpoint specificato o è stata avviata l'esecuzione del programma
_CrtMemDumpStatistics Dump delle informazioni di intestazione di debug per uno stato della memoria specificato in un form leggibile dall'utente
_CrtReportBlockType Restituisce il tipo/sottotipo di blocco associato a un puntatore di blocco dell'heap di debug specificato.
_CrtSetAllocHook Installare una funzione di allocazione definita dal client associandola al processo di allocazione della memoria di debug del runtime C
_CrtSetBreakAlloc Impostare un punto di interruzione su un determinato numero di ordine di allocazione dell'oggetto
_CrtSetDbgFlag Recuperare o modificare lo stato del flag _crtDbgFlag per controllare il comportamento di allocazione del gestore dell'heap di debug
_CrtSetDumpClient Installare una funzione definita dall'applicazione che viene chiamata ogni volta che una funzione di dump di debug viene chiamata per il dump dei blocchi di memoria di tipo _CLIENT_BLOCK
_CrtSetReportFile Identificare il file o flusso che verrà usato da _CrtDbgReport come destinazione per un tipo di report specifico
_CrtSetReportHook Installare una funzione per la creazione di report definita dal client associandola al processo di creazione di report sul debug del runtime C
_CrtSetReportHook2, _CrtSetReportHookW2 Installare o disinstallare una funzione per la creazione di report definita dal client associandola al processo di creazione di report sul debug del runtime C.
_CrtSetReportMode Specificare le destinazioni generali per un tipo specifico di report generato da _CrtDbgReport
_RPT[0,1,2,3,4] Tenere traccia dell'avanzamento dell'applicazione con un report di debug generato chiamando _CrtDbgReport con una stringa di formato e un numero variabile di argomenti. Non specifica informazioni sul file di origine e il numero di riga.
_RPTF[0,1,2,3,4] Simile alle macro _RPTn ma specifica il nome del file di origine e il numero di riga in cui ha origine la richiesta di report
_calloc_dbg Allocare un numero specificato di blocchi di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e buffer di sovrascrittura
_expand_dbg Ridimensiona un blocco di memoria specificato nell'heap espandendo o contraendo il blocco
_free_dbg Liberare un blocco di memoria nell'heap
_fullpath_dbg, _wfullpath_dbg Creare un nome di percorso assoluto o completo per il nome di percorso relativo specificato usando _malloc_dbg per allocare memoria.
_getcwd_dbg, _wgetcwd_dbg Ottenere la directory di lavoro corrente usando _malloc_dbg per allocare memoria.
_malloc_dbg Allocare un blocco di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e buffer di sovrascrittura
_msize_dbg Calcolare le dimensioni di un blocco di memoria nell'heap
_realloc_dbg Riallocare un blocco specificato di memoria nell'heap spostando e/o ridimensionando il blocco
_strdup_dbg, _wcsdup_dbg Duplica una stringa usando _malloc_dbg per allocare memoria.
_tempnam_dbg, _wtempnam_dbg Generano i nomi che possono essere usati per creare i file temporanei, usando _malloc_dbg per allocare memoria.

Le routine di debug possono essere usate per eseguire il codice sorgente un'istruzione alla volta per la maggior parte delle altre routine di runtime C durante il processo di debug. Per Microsoft tuttavia si tratta di una tecnologia proprietaria, quindi il codice sorgente per queste routine non è disponibile. Nella maggior parte dei casi queste routine appartengono ai gruppi di gestione delle eccezioni o ai gruppi di elaborazione a virgola mobile, ma anche ad alcuni altri gruppi. Le routine sono riportate nella tabella seguente.

Routine di runtime C non disponibili come codice sorgente

acos, acosf, acosl _fpclass _nextafter
asin _fpieee_flt pow
atan, atan2 _fpreset printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l*
_cabs frexp _scalb
ceil _hypot scanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l*
_chgsign, _chgsignf, _chgsignl _isnan setjmp
_clear87, _clearfp _j0 sin
_control87, _controlfp, __control87_2 _j1 sinh
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl _jn sqrt
cos ldexp _status87, _statusfp
cosh log tan
Exp log10 tanh
fabs _logb _y0
_finite longjmp _y1
floor _matherr _yn
fmod modf

* Sebbene il codice sorgente sia disponibile per la maggior parte di questa routine, la routine effettua una chiamata interna a un'altra routine per cui non è disponibile il codice sorgente.

Alcuni operatori C++ e funzioni di runtime C si comportano in modo diverso quando vengono chiamati da una build di debug di un'applicazione. Si noti che una build di debug di un'applicazione può essere eseguita definendo il flag _DEBUG o con il collegamento a una versione di debug della libreria di runtime C. Le differenze di comportamento in genere sono rappresentate da funzionalità o informazioni aggiuntive specificate dalla routine per supportare il processo di debug. Le routine sono riportate nella tabella seguente.

Routine che si comportano in modo diverso nella build di debug di un'applicazione

Routine C abort Operatore C++ delete
Routine C assert Operatore C++ new

Vedere anche

Routine di runtime per categoria
Controllo degli errori di runtime