Condividi tramite


Routine di debug

La versione di debug della libreria di runtime del linguaggio C fornisce numerosi servizi diagnostici che permettono di eseguire facilmente il debug di programmi e consentono agli sviluppatori di:

  • Passare direttamente le funzioni di runtime durante il debug

  • Risolvere asserzioni, errori ed eccezioni

  • Analizzare le allocazioni degli heap e impedire perdite di memoria

  • Riportare i messaggi di debug all'utente

Per utilizzare le routine, deve essere definito il flag _DEBUG. Tutte le routine non hanno alcun effetto in una build finale di un'applicazione. Per ulteriori informazioni su come utilizzare le nuove routine di debug, consultare Tecniche di debug CRT.

Versioni di debug delle routine di libreria di runtime C

Routine

Utilizzo

Equivalente .NET Framework

_ASSERT

Valuta un'espressione e genera un report di debug quando il risultato è FALSE

System::Diagnostics::Debug::Assert

_ASSERTE

Simile a _ASSERT, ma include l'espressione non riuscita nel rapporto generato

System::Diagnostics::Debug::Assert

_CrtCheckMemory

Verifica l'integrità dei blocchi di memoria allocati nell'heap di debug

System::Diagnostics::PerformanceCounter

_CrtDbgBreak

Imposta un punto di interruzione.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtDbgReport, _CrtDbgReportW

Genera un report di debug con un messaggio utente e invia il rapporto a tre possibili destinazioni

System::Diagnostics::Debug::Write, System::Diagnostics::Debug::Writeline, System::Diagnostics::Debug::WriteIf, System::Diagnostics::Debug::WriteLineIf

_CrtDoForAllClientObjects

Chiama una funzione fornita esplicitamente per tutti i tipi _CLIENT_BLOCK nell'heap

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtDumpMemoryLeaks

Esegue il dump di tutti i blocchi di memoria nell'heap di debug quando si è verificata una perdita di memoria significativa

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtIsMemoryBlock

Verifica che un blocco di memoria specificato sia presente nell'heap locale con un identificatore valido del tipo di blocco dell'heap di debug

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtIsValidHeapPointer

Verifica che un puntatore specificato sia nell'heap locale

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtIsValidPointer

Verifica che un determinato intervallo di memoria sia valido per la lettura e scrittura

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtMemCheckpoint

Ottiene lo stato corrente dell'heap di debug e lo archivia in una struttura fornita esplicitamente dall'applicazione _CrtMemState

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtMemDifference

Confronta due stati di memoria per le differenze significative e restituisce i risultati

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtMemDumpAllObjectsSince

Esegue il dump delle informazioni sugli oggetti nell'heap poiché è stato creato un checkpoint specificato o dall'avvio dell'esecuzione del programma

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtMemDumpStatistics

Esegue il dump delle informazioni di intestazione di debug per una determinata condizione di memoria in formato leggibile dall'utente

System::Diagnostics::PerformanceCounter

_CrtReportBlockType

Restituisce il tipo di blocco/sottotipo associato a un dato puntatore di blocco dell'heap di debug.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetAllocHook

Installa una funzione di allocazione definita dal client agganciandola nel processo di allocazione della memoria di debug CRT

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetBreakAlloc

Imposta un punto di interruzione su un numero di un ordine di allocazione di un oggetto specificato

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetDbgFlag

Recupera o modifica lo stato del flag _crtDbgFlag per controllare il comportamento dell'amministratore dell'heap di debug

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetDumpClient

Installa una funzione definita dall'applicazione che viene chiamata ogni volta che una funzione di dump di debug viene chiamata per eseguire il dump dei blocchi di memoria del tipo _CLIENT_BLOCK

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetReportFile

Individua il file o un flusso da essere utilizzato come destinazione per un tipo di report specifico da _CrtDbgReport

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetReportHook

Installa una funzione definita dal client di segnalazione agganciandola nel processo di creazione di report di debug CRT

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetReportHook2, _CrtSetReportHookW2

Installa o disinstalla una funzione di segnalazione definita dal client agganciandola al processo di creazione di report di debug della fase di runtime del linguaggio C.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_CrtSetReportMode

Specifica le destinazioni generali per un tipo di report specifico generato da _CrtDbgReport

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_RPT[0,1,2,3,4]

Tiene traccia dello stato di avanzamento dell'applicazione generando un report di debug chiamando _CrtDbgReport con una stringa di formato e un numero variabile di argomenti. Non fornisce informazioni sul numero di riga e del file di origine.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_RPTF[0,1,2,3,4]

Simile alle macro _RPTn, ma fornisce il nome file di origine e il numero di riga in cui è stata originata la richiesta di report

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_calloc_dbg

Alloca un numero specificato di blocchi di memoria nell'heap con ulteriore spazio per un'intestazione di debug e sovrascrive i buffer

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_expand_dbg

Ridimensiona un blocco di memoria specificato nell'heap espandendo o contraendo il blocco

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_free_dbg

Libera un blocco di memoria nell'heap

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_fullpath_dbg, _wfullpath_dbg

Crea un nome di percorso assoluto o completo per il percorso relativo specificato, utilizzando _malloc_dbg per allocare memoria.

System::IO::File::Create

_getcwd_dbg, _wgetcwd_dbg

Ottiene la cartella di lavoro corrente, utilizzando _malloc_dbg per allocare memoria.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_malloc_dbg

Alloca un blocco di memoria nell'heap con ulteriore spazio per un'intestazione di debug e sovrascrive i buffer

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_msize_dbg

Calcola la dimensione di un blocco di memoria nell'heap

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_realloc_dbg

Ridistribuisce un blocco di memoria specificato nell'heap spostando e/o ridimensionando il blocco

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

_strdup_dbg, _wcsdup_dbg

Duplica una stringa, con _malloc_dbg per allocare memoria.

System::String::Clone

_tempnam_dbg, _wtempnam_dbg

Genera i nomi utilizzabili per creare i file temporanei, utilizzando _malloc_dbg per allocare memoria.

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Le routine di debug possono essere utilizzate per eseguire il codice sorgente per la maggior parte delle altre routine di runtime del linguaggio C durante il processo di debug. Tuttavia, Microsoft considera la tecnologia come privata e, pertanto, non fornisce il codice sorgente per queste routine. La maggior parte di queste routine appartengono alla gestione delle eccezioni o a gruppi di elaborazione a virgola mobile, ma alcune sono incluse. Nella tabella seguente sono elencate queste routine.

Routine di runtime del linguaggio C non disponibili nel 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 queste routine, effettua una chiamata interna in un altro codice sorgente di routine, il quale non viene reso disponibile.

Alcune funzioni di runtime del linguaggio C e operatori C++ si comportano in modo diverso quando vengono chiamati da una build di debug di un'applicazione. (Notare che una build di debug di un'applicazione può essere eseguita definendo il flag _DEBUG o il collegamento a una versione di debug della libreria di runtime C.) Le differenze di comportamento sono costituiti da funzionalità aggiuntive o delle informazioni fornite dalla routine per supportare il processo di debug. Nella tabella seguente sono elencate queste routine.

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

Routine abort (C)

Operatore delete (C++)

Routine assert (C)

Operatore new (C++)

Vedere anche

Riferimenti

Routine di runtime per categoria

Controllo degli errori di runtime