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