Procedura di debug
La versione di debug della libreria di runtime del linguaggio C fornisce numerosi servizi diagnostici a cui rendere i programmi di debug più facili e consentire agli sviluppatori:
Passaggio direttamente le funzioni di runtime durante il debug
Asserzioni, errori ed eccezioni di risoluzione
La tracciatura delle allocazioni heap e impedire perdite di memoria
Messaggi di debug di rapporto all'utente
Per utilizzare le routine, _DEBUG il flag deve essere definito.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, vedere tecniche di debug CRT.
Versioni di debug delle routine della libreria di runtime del linguaggio C
routine |
Utilizzare |
equivalente di .NET Framework |
---|---|---|
valutare un'espressione e generato un report di debug quando il risultato è FALSE |
||
simile a _ASSERT, ma include l'espressione non riuscita il rapporto generato |
||
Verificare l'integrità dei blocchi di memoria allocati nell'heap di debug |
||
Imposta un punto di interruzione. |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Generare un report di debug con un messaggio utente e inviare il rapporto a tre possibili destinazioni |
System:: diagnostica:: debug:: scrivere, System:: diagnostica:: debug:: Writeline, System:: diagnostica:: debug:: WriteIf, System:: diagnostica:: debug:: WriteLineIf |
|
chiamare una funzione applicazione-fornita per tutti _CLIENT_BLOCK tipi nell'heap |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Eseguire il dump di tutti i blocchi di memoria nell'heap di debug quando una perdita di memoria significativa si è verificata |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Verificare che un blocco di memoria specificato sia situato nell'heap locale con un identificatore valido del tipo di blocco dell'heap di debug |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Verifica che un puntatore specificato sia nell'heap locale |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Verificare che un determinato intervallo di memoria sia valido per la lettura e scrittura |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Ottenere lo stato corrente dell'heap di debug e memorizzarlo in applicazione-fornito _CrtMemState struttura |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
confrontare due stati di memoria per le differenze significative e restituire i risultati |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Per eseguire il dump delle informazioni sugli oggetti nell'heap poiché un checkpoint specificato è stato creato o dall'inizio dell'esecuzione del programma |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Per eseguire il dump delle informazioni di intestazione di debug per un determinato stato di memoria in formato leggibile dall'utente |
||
Restituisce il tipo di blocco/sottotipo associati a un puntatore specificato del blocco dell'heap di debug. |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Installare una funzione di allocazione definita dal client agganciandola nel processo di allocazione della memoria di debug di runtime del linguaggio C |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Impostare un punto di interruzione su un numero ordine specificato di allocazione di oggetti |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Recuperare o modificare lo stato di _crtDbgFlag flag per controllare il comportamento di allocazione dell'heap di debug |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Installare una funzione definita dall'applicazione che viene chiamata ogni volta che una funzione di dump di debug viene chiamata per eseguire il dump _CLIENT_BLOCK digitare i blocchi di memoria |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Individuare il file o un flusso per essere utilizzato come destinazione per un tipo di report specifico da _CrtDbgReport |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Installare una funzione definita dal client di segnalazione agganciandola nel runtime del linguaggio C debug che segnala il processo |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Installazione o disinstallazione una funzione definita dal client di segnalazione agganciandola nel runtime del linguaggio C debug che segnala il processo. |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Specificare le destinazioni generali per un tipo di report specifico generato da _CrtDbgReport |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Tenere traccia dello stato di avanzamento dell'applicazione viene generato 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 c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Simile a _RPTn le macro, ma fornisce il nome file di origine e il numero di riga in cui la richiesta del rapporto proviene |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Allocare un numero specificato di blocchi di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e sovrascrivere i buffer |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Per ridimensionare un blocco di memoria specificato nell'heap espandendo o contraendo il blocco |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Liberare un blocco di memoria nell'heap |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Creare un assoluto o un nome di percorso completo per il percorso relativo specificato, tramite differenze per allocare memoria. |
||
Ottenere la cartella di lavoro corrente, tramite differenze per allocare memoria. |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Allocare un blocco di memoria nell'heap con spazio aggiuntivo per un'intestazione di debug e sovrascrivere i buffer |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Calcolare la dimensione di un blocco di memoria nell'heap |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Ridistribuire un blocco di memoria specificato nell'heap spostando e/o il ridimensionamento del blocco |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
|
Duplica una stringa, tramite differenze per allocare memoria. |
||
Generare nomi che è possibile utilizzare per creare i file temporanei, tramite differenze per allocare memoria. |
Non applicabile.Per chiamare la funzione c standard, utilizzare PInvoke.Per ulteriori informazioni, vedere Esempi di pinvoke. |
Le routine di debug possono essere utilizzate per l'esecuzione del 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 virgola mobile di elaborazione, ma alcuni altre sono incluse anche.Nella tabella seguente sono elencate le routine.
Routine di runtime del linguaggio C non disponibili in forma di codice sorgente
printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l* |
||
scanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l* |
||
|
* Sebbene il codice sorgente sia disponibile per la maggior parte di questa procedura, effettua una chiamata interna a un altro codice sorgente di routine per il quale non viene fornito.
Alcune funzioni di runtime del linguaggio C gli operatori e 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 verso una o l'altra definizione _DEBUG per impostare o il collegamento a una versione di debug della libreria di runtime C.) Le differenze di comportamento generale sono costituite da funzionalità aggiuntive o delle informazioni fornite dalla routine per supportare il processo di debug.Nella tabella seguente sono elencate le routine.
Routine che si comportano in modo diverso in una build di debug di un'applicazione
C# interruzione routine |
C++ eliminazione operatore |
C# asserzione routine |
C++ nuovo operatore |
Per ulteriori informazioni sull'utilizzo delle versioni di debug degli operatori C++ nella tabella precedente, vedere Utilizzo dell'heap di debug da C++.