Routine di debug

La versione di debug della libreria di runtime C offre numerosi servizi di diagnostica 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

Versioni di debug delle routine della libreria di runtime C

Per utilizzare queste routine, è necessario definire il _DEBUG flag . Tutte queste routine non eseguono alcuna operazione nella versione finale di un'applicazione. Per altre informazioni su come usare le nuove routine di debug, vedere Tecniche di debug CRT.

Ciclo Utilizzo
_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 sovrascrivere i buffer
_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 del 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 sovrascrivere i buffer
_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, utilizzando _malloc_dbg per allocare memoria.
_tempnam_dbg, _wtempnam_dbg Generare nomi che è possibile usare per creare file temporanei, usando _malloc_dbg per allocare memoria.

Routine di runtime C non disponibili nel modulo del codice sorgente

Il debugger può essere usato per eseguire il codice sorgente un'istruzione alla volta per la maggior parte delle routine di runtime C durante il processo di debug. Tuttavia, Microsoft considera una tecnologia proprietaria e, pertanto, non fornisce il codice sorgente per un subset di queste routine. 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.

Anche se il codice sorgente è disponibile per la printf maggior parte delle routine e scanf , effettua una chiamata interna a un'altra routine per cui non viene fornito il codice sorgente.

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

Alcuni operatori C++ e funzioni di runtime C si comportano in modo diverso quando vengono chiamati da una build di debug di un'applicazione. È possibile creare una build di debug di un'applicazione definendo il _DEBUG flag o collegando una versione di debug della libreria di runtime C. Le differenze comportamentali in genere sono costituite da funzionalità o informazioni aggiuntive fornite dalla routine per supportare il processo di debug. Le routine sono riportate nella tabella seguente.

Routine C abort

Routine C assert

Operatore C++ delete

Operatore C++ new

Vedi anche

Routine di Universal C Runtime per categoria
Controllo degli errori di runtime