_RPT
, _RPTF
, _RPTW
, macro _RPTFW
Tiene traccia dello stato di un'applicazione mediante la generazione di un report di debug (solo versione di debug). Il n
suffisso specifica il numero di argomenti in args
e può essere 0, 1, 2, 3, 4 o 5.
Sintassi
_RPTn(
reportType,
format,
...[args]
);
_RPTFn(
reportType,
format,
[args]
);
_RPTWn(
reportType,
format
[args]
);
_RPTFWn(
reportType,
format
[args]
);
Parametri
reportType
Tipo di report: _CRT_WARN
, _CRT_ERROR
o _CRT_ASSERT
.
format
Stringa di controllo del formato usata per creare il messaggio utente.
args
Argomenti di sostituzione usati da format
.
Osservazioni:
Tutte queste macro accettano i reportType
parametri e format
. Inoltre, potrebbero anche accettare fino a quattro argomenti, indicati dal numero aggiunto al nome della macro. Ad esempio, _RPT0
e _RPTF0
non accettare altri argomenti e _RPT1
_RPTF1
accettare arg1
_RPT2
e _RPTF2
accettare arg1
e arg2
e così via.
Le _RPT
macro e _RPTF
sono simili alla printf
funzione, perché possono essere usate per tenere traccia dello stato di avanzamento di un'applicazione durante il processo di debug. Tuttavia, queste macro sono più flessibili rispetto printf
al fatto che non devono essere racchiuse nelle istruzioni #ifdef per impedire che vengano chiamate in una compilazione definitiva di un'applicazione. Questa flessibilità viene ottenuta tramite la _DEBUG
macro. Le _RPT
macro e _RPTF
sono disponibili solo quando viene definito il _DEBUG
flag. Quando _DEBUG
non viene definita, le chiamate a queste macro vengono rimosse durante la pre-elaborazione.
Le macro _RPTW
e _RPTFW
sono versioni a caratteri wide di queste macro. Sono simili a wprintf
e accettano stringhe di caratteri wide come argomenti.
Le _RPT
macro chiamano la _CrtDbgReport
funzione per generare un report di debug con un messaggio utente. Le macro _RPTW
chiamano la funzione _CrtDbgReportW
per generare lo stesso report con caratteri wide. Le macro _RPTF
e _RPTFW
creano un report di debug con il file di origine e il numero di riga in cui è stata chiamata la macro di report, oltre al messaggio utente. Il messaggio utente viene creato sostituendo gli arg[n]
argomenti nella format
stringa, usando le stesse regole definite dalla printf
funzione.
_CrtDbgReport
o _CrtDbgReportW
genera il report di debug e ne determina la destinazione o destinazioni, in base alle modalità del report e al file definito per reportType
. Le _CrtSetReportMode
funzioni e _CrtSetReportFile
vengono usate per definire le destinazioni per ogni tipo di report.
Se viene chiamata una _RPT
macro e _CrtSetReportMode
_CrtSetReportFile
non è stata chiamata, i messaggi vengono visualizzati come segue:
Tipo di report | Destinazione di output |
---|---|
_CRT_WARN |
Il testo dell'avviso non viene visualizzato. |
_CRT_ERROR |
Finestra popup. Come se fosse stato specificato _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW); . |
_CRT_ASSERT |
Uguale a _CRT_ERROR . |
Quando la destinazione è una finestra di messaggio di debug e l'utente sceglie il pulsante _CrtDbgReport
Riprova o _CrtDbgReportW
restituisce 1. Questo valore restituito fa sì che queste macro avviino il debugger, se il debug JIT (Just-In-Time) è abilitato. Per altre informazioni sull'uso di queste macro come meccanismo di gestione degli errori di debug, vedere Macro per la creazione di report.
Sono disponibili altre due macro che generano un report di debug. La _ASSERT
macro genera un report, ma solo quando il relativo argomento di espressione restituisce FALSE
. _ASSERTE
è esattamente come _ASSERT
, ma include l'espressione non riuscita nel report generato.
Requisiti
Macro | Intestazione obbligatoria |
---|---|
Macro _RPT |
<crtdbg.h> |
Macro _RPTF |
<crtdbg.h> |
Macro _RPTW |
<crtdbg.h> |
Macro _RPTFW |
<crtdbg.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Librerie
Solo le versioni di debug delle librerie di runtime di C.
Sebbene queste macro siano disponibili quando si include crtdbg.h
, per l'esecuzione, l'applicazione deve collegarsi a una delle librerie di debug, perché queste macro chiamano altre funzioni di runtime.
Esempio
Vedere l'esempio nell'articolo _ASSERT
.