Condividi tramite


Servizi diagnostici

La libreria MFC fornisce numerosi servizi diagnostici in grado di eseguire il debug dei programmi più semplice. Questi servizi diagnostici includono le macro e funzioni globali che consentono di tenere traccia delle allocazioni di memoria del programma, che consentono di eseguire il dump del contenuto degli oggetti in fase di esecuzione e che stampa messaggi di debug in fase di esecuzione. Le macro e funzioni globali per i servizi diagnostici sono suddivise nelle seguenti categorie:

  • Macro di diagnostica generali

  • Funzioni e variabili diagnostiche generali

  • Funzioni di diagnostica dell'oggetto

Queste macro e funzioni sono disponibili per tutte le classi derivate da CObject nelle versioni di debug e di rilascio di MFC. Tuttavia, tutte tranne DEBUG_NEW e VERIFICA non fanno la versione di rilascio.

Nella libreria di debug, tutti i blocchi di memoria allocata sono inquadrati con una serie di "byte guard." Se questi byte sono compromessi da una memoria errante write, le procedure di diagnostica può segnalare un problema. Se si include la riga:

#define new DEBUG_NEW

nel file di implementazione, tutte le chiamate a nuova archiviano il nome file e il numero di riga in cui l'allocazione della memoria è stata eseguita. La funzione CMemoryState::DumpAllObjectsSince visualizzare queste informazioni aggiuntive, consentendo di identificare le perdite di memoria. Fare riferimento alla classe CDumpContext per ulteriori informazioni sull'output di diagnostica.

Inoltre, la libreria di runtime C supporta inoltre un insieme di funzioni diagnostiche che è possibile utilizzare per il debug delle applicazioni. Per ulteriori informazioni, vedere Procedura di debug in riferimenti alla libreria di runtime.

Macro di diagnostica generali di MFC

ASSERT

Visualizza un messaggio e quindi arrestare il programma se l'espressione specificata risulta essere FALSE nella versione di debug della libreria.

ASSERT_KINDOF

Test che un oggetto è un oggetto della classe specificata o di una classe derivata dalla classe specificata.

ASSERT_VALID

Verifica la validità interna di un oggetto chiamando la funzione membro di AssertValid ; in genere sottoposte a override da CObject.

DEBUG_NEW

Fornisce un nome file e un numero di riga per tutte le allocazioni degli oggetti in modalità di debug per individuare perdite di memoria.

DEBUG_ONLY

Simile a ASSERT ma non verifica il valore dell'espressione; utile per il codice da eseguire solo in modalità di debug.

TRACCIA

Fornisce printffunzionalità di tipo nella versione di debug della libreria.

VERIFICA

Simile a ASSERT ma valuta l'espressione nella versione di rilascio della libreria e nella versione di debug.

Variabili di diagnostica generali e funzioni MFC

afxDump

Variabile globale che invia le informazioni di CDumpContext la finestra di output del debugger o a terminale di debug.

afxMemDF

Variabile globale che controlla il comportamento di allocatore di memoria di debug.

AfxCheckError

La variabile globale utilizzato per il test SCODE passato per verificare se è un errore e, in caso affermativo, genera l'errore corrispondente.

AfxCheckMemory

Controlla attualmente l'integrità di tutti memoria allocata.

AfxDump

Se viene chiamato durante il debugger, dump dello stato di un oggetto durante il debug.

AfxDumpStack

Genera un'immagine dello stack corrente. Questa funzione è sempre collegata in modo statico.

AfxEnableMemoryLeakDump

Abilita il dump delle perdite di memoria.

AfxEnableMemoryTracking

Ruotare la memoria che tiene traccia e disattivarli.

AfxIsMemoryBlock

Verifica che un blocco di memoria sia stato correttamente allocato.

AfxIsValidAddress

Verifica che un intervallo di indirizzi di memoria sia entro i limiti del programma.

AfxIsValidString

Determina se un puntatore a una stringa è valido.

AfxSetAllocHook

Consente di chiamare una funzione su ogni allocazione di memoria.

Funzioni di diagnostica degli oggetti MFC

AfxDoForAllClasses

Esegue una funzione specificata in qualsiasi CObject- classi derivate che supportano controllare il tipo di runtime.

AfxDoForAllObjects

Esegue una funzione specificata in qualsiasi CObject- oggetti derivati allocati con nuova.

Vedere anche

Concetti

Macro e funzioni globali MFC