Condividi tramite


_CrtDbgReport, _CrtDbgReportW

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

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 del rapporto, _CrtDbgReport e _CrtDbgReportW restituiscono –1 se si verifica un errore e 0 se non si verificano errori. Tuttavia, quando la destinazione del rapporto è una finestra di messaggio di debug e l'utente fa clic sul pulsante Riprova, queste funzioni restituiscono 1. Se l'utente fa clic sul pulsante Interrompi nella finestra di messaggio di debug, queste funzioni vengono interrotte immediatamente e non restituiscono un valore.

Le macro di debug _RPT, _RPTF effettuano una chiamata a _CrtDbgReport per generare i relativi rapporti di debug. Le versioni a caratteri wide di queste macro, nonché _ASSERT[E], _RPTWn e _RPTFWn usano _CrtDbgReportW per generare i rapporti di debug. Quando _CrtDbgReport o _CrtDbgReportW restituiscono 1, queste macro avviano il debugger JIT (just-in-time), purché il debug sia abilitato.

Note

_CrtDbgReport e _CrtDbgReportW possono inviare il rapporto di debug a tre destinazioni diverse: un file di rapporto di debug, un monitor di debug (ovvero il debugger Visual Studio) o a una finestra di messaggio di debug. Vengono usate due funzioni di configurazione, _CrtSetReportMode ed _CrtSetReportFile, per specificare la destinazione o le destinazioni per ogni tipo di rapporto 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 di _CRT_WARN possa essere inviato solo al monitor di debug, mentre un reportType di _CRT_ASSERT sia inviato a una finestra di messaggio di debug e a un file di rapporto definito dall'utente.

_CrtDbgReportW è la versione a caratteri wide di _CrtDbgReport. Tutti gli output e i parametri di stringa sono espressi in stringhe a caratteri wide, per il resto è identico alla versione a un byte.

_CrtDbgReport e _CrtDbgReportW creano il messaggio utente per il rapporto di debug tramite la sostituzione degli argomenti argument[n] nella stringa format, usando le stesse regole definite dalle funzioni printf 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 i messaggi usando l'API OutputDebugString di Windows.

_CRTDBG_MODE_WNDW

Non applicabile

Effettua una chiamata all'API MessageBox di Windows per creare la finestra di messaggio in cui visualizzare il messaggio oltre ai pulsanti Interrompi, Riprova e Ignora. Se un utente fa clic su Interrompi, _CrtDbgReport o _CrtDbgReport viene immediatamente interrotto. Se un utente fa clic su Riprova, restituisce 1. Se un utente fa clic su Ignora, l'esecuzione continua e _CrtDbgReport e _CrtDbgReportW restituiscono 0. Si noti che quando si fa clic su Ignora in presenza di una condizione di errore, spesso si determina un "comportamento indefinito".

_CRTDBG_MODE_FILE

__HFILE

Scrive un messaggio nell'HANDLE fornito dall'utente, usando l'API WriteFile di Windows e non verifica la validità dell'handle di file. L'applicazione è responsabile dell'apertura del file del rapporto e del passaggio di un file di handle 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à rapporto e il file del rapporto, vedere le funzioni _CrtSetReportMode e _CrtSetReportFile. Per altre informazioni sull'uso delle macro di debug e delle funzioni di creazione dei rapporti, vedere Macro per la creazione di rapporti.

Se l'applicazione necessita di maggiore flessibilità di quella fornita da _CrtDbgReport e _CrtDbgReportW, è possibile scrivere una funzione di creazione dei rapporti personalizzata e agganciarla nel meccanismo di creazione dei rapporti della libreria di runtime C usando la funzione _CrtSetReportHook.

Requisiti

Routine

Intestazione obbligatoria

_CrtDbgReport

<crtdbg.h>

_CrtDbgReportW

<crtdbg.h>

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

Librerie

Solo versioni di debug delle librerie di runtime 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
}

Per un esempio su come modificare la funzione rapporto, vedere crt_dbg2.

Equivalente .NET Framework

Vedere anche

Riferimenti

Routine di debug

_CrtSetReportMode

_CrtSetReportFile

printf, _printf_l, wprintf, _wprintf_l

_DEBUG