Condividi tramite


_CrtDbgReport, _CrtDbgReportW

Genera un rapporto con un messaggio di debug e lo invia tre possibili destinazioni (solo versione di debug).

Sintassi

int _CrtDbgReport(
   int reportType,
   const char *filename,
   int linenumber,
   const char *moduleName,
   const char *format [,
   argument] ...
);
int _CrtDbgReportW(
   int reportType,
   const wchar_t *filename,
   int linenumber,
   const wchar_t *moduleName,
   const wchar_t *format [,
   argument] ...
);

Parametri

reportType
Tipo di segnalazione: _CRT_WARN, _CRT_ERROR e _CRT_ASSERT.

filename
Puntatore al nome del file di origine in cui si è verificata l'asserzione o il rapporto o NULL.

lineNumber
Numero di riga nel file di origine in cui si è verificata l'asserzione o il rapporto o NULL.

moduleName
Puntatore al nome del modulo (.exe o .dll) in cui si è verificata l'asserzione o il rapporto.

format
Puntatore alla stringa di controllo del formato usata per creare il messaggio utente.

argument
Argomenti di sostituzione facoltativi usati da format.

Valore restituito

Per tutte le destinazioni _CrtDbgReport del report e _CrtDbgReportW restituire -1 se si verifica un errore e 0 se non vengono rilevati errori. Tuttavia, quando la destinazione del report è una finestra di messaggio di debug e l'utente sceglie il pulsante Riprova , queste funzioni restituiscono 1. Se l'utente sceglie il pulsante Interrompi nella finestra Debug messaggio, queste funzioni interrompono immediatamente e non restituiscono un valore.

Le _RPTmacro di _RPTF debug chiamano _CrtDbgReport per generare i report di debug. Le versioni a caratteri wide di queste macro, insieme _ASSERTa ,_RPTW _ASSERTEe _RPTFW, usano _CrtDbgReportW per generare i report di debug. Quando _CrtDbgReport o _CrtDbgReportW restituisce 1, queste macro avviano il debugger, se il debug JIT (Just-In-Time) è abilitato.

Osservazioni:

_CrtDbgReport e _CrtDbgReportW possono inviare il report di debug a tre destinazioni diverse: un file di report di debug, un monitoraggio di debug (debugger di Visual Studio) o una finestra di messaggio di debug. Due funzioni di configurazione, _CrtSetReportMode e _CrtSetReportFile, vengono usate per specificare la destinazione o le destinazioni per ogni tipo di report. Queste funzioni consentono alle destinazioni per la creazione dei rapporti per ogni tipo di rapporto di essere controllate separatamente. Ad esempio, è possibile specificare che un reportType oggetto di _CRT_WARN passa solo al monitoraggio di debug, mentre un reportType di _CRT_ASSERT passa sia a una finestra di messaggio di debug che a un file di report definito dall'utente.

_CrtDbgReportW è la versione a caratteri wide di _CrtDbgReport. Tutti i relativi parametri di output e stringa sono in stringhe di caratteri wide; in caso contrario, è identico alla versione di caratteri a byte singolo.

_CrtDbgReport e _CrtDbgReportW creare il messaggio utente per il report di debug sostituendo gli argument[n] argomenti nella format stringa, usando le stesse regole definite dalle printf funzioni o wprintf . Queste funzioni generano quindi il rapporto di debug e determinano la destinazione o le destinazioni in base alle modalità rapporto correnti e al file definito per reportType. Quando il rapporto viene inviato a una finestra di messaggio di debug, filename, lineNumber e moduleName sono inclusi nelle informazioni visualizzate nella finestra.

Nella tabella seguente sono illustrate le scelte disponibili per le modalità rapporto e il file e il comportamento risultante di _CrtDbgReport e _CrtDbgReportW. Queste opzioni sono definite come flag di bit in <crtdbg.h>.

Modalità rapporto File di rapporto Comportamento di _CrtDbgReport, _CrtDbgReportW
_CRTDBG_MODE_DEBUG Non applicabile Scrive un messaggio usando l'API Windows OutputDebugString .
_CRTDBG_MODE_WNDW Non applicabile Chiama l'API Windows MessageBox per creare la finestra di messaggio per visualizzare il messaggio insieme ai pulsanti Interrompi, Riprova e Ignora . Se un utente sceglie Interrompi _CrtDbgReport o _CrtDbgReport interrompe immediatamente. Se un utente sceglie Riprova, restituisce 1. Se un utente sceglie Ignora, l'esecuzione continua e _CrtDbgReportW _CrtDbgReport restituisce 0. Se si sceglie Ignora quando esiste una condizione di errore, spesso si verifica un comportamento non definito.
_CRTDBG_MODE_FILE __HFILE Scrive il messaggio fornito dall'utente HANDLEusando l'API Di Windows WriteFile e non verifica la validità dell'handle di file. L'applicazione è responsabile dell'apertura del file di report e del passaggio di un handle di file valido.
_CRTDBG_MODE_FILE _CRTDBG_FILE_STDERR Scrive il messaggio in stderr.
_CRTDBG_MODE_FILE _CRTDBG_FILE_STDOUT Scrive il messaggio in stdout.

Il rapporto può essere inviato a una, due o tre destinazioni o a nessuna destinazione. Per altre informazioni su come specificare la modalità o le modalità del report e il file di report, vedere le _CrtSetReportMode funzioni e _CrtSetReportFile . Per altre informazioni sull'uso delle macro di debug e delle funzioni di creazione di report, vedere Macro per la creazione di report.

Se l'applicazione necessita di maggiore flessibilità rispetto a quella fornita da _CrtDbgReport e _CrtDbgReportW, è possibile scrivere una funzione di creazione di report personalizzata e associarla al meccanismo di creazione di report della libreria di runtime C usando la _CrtSetReportHook funzione .

Requisiti

Ciclo Intestazione obbligatoria
_CrtDbgReport <crtdbg.h>
_CrtDbgReportW <crtdbg.h>

_CrtDbgReport e _CrtDbgReportW sono estensioni Microsoft. Per altre informazioni, vedere Compatibility.

Librerie

Solo le versioni di debug delle librerie di runtime di C.

Esempio

// crt_crtdbgreport.c
#include <crtdbg.h>

int main(int argc, char *argv[]) {
#ifdef _DEBUG
   _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, argv[0], NULL);
#endif
}

Vedere crt_dbg2 per un esempio di come modificare la funzione di report.

Vedi anche

Routine di debug
_CrtSetReportMode
_CrtSetReportFile
printf, _printf_l, wprintf_wprintf_l
_DEBUG