_CrtDbgReport
, _CrtDbgReportW
Generiert einen Bericht mit einer Debugmeldung und sendet den Bericht zu drei möglichen Zielen (nur Debugversion).
Syntax
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] ...
);
Parameter
reportType
Berichtstyp: _CRT_WARN
, _CRT_ERROR
und _CRT_ASSERT
.
filename
Zeiger auf den Namen der Quelldatei, in der Assert/Bericht oder NULL
aufgetreten sind.
lineNumber
Zeilennummer in der Quelldatei, in der Assert/Bericht oder NULL
aufgetreten sind.
moduleName
Zeiger auf den Namen des Moduls (.exe oder .dll), in dem die Assertion oder der Bericht aufgetreten ist.
format
Zeiger auf die Formatsteuerelementzeichenfolge, mit der die Benutzermeldung erstellt wird.
argument
Von format
verwendete optionale Ersatzargumente.
Rückgabewert
Geben Sie für alle Berichtsziele -1 zurück, _CrtDbgReport
_CrtDbgReportW
wenn ein Fehler auftritt, und 0, wenn keine Fehler aufgetreten sind. Wenn das Berichtsziel jedoch ein Debugmeldungsfenster ist und der Benutzer die Schaltfläche "Wiederholen " auswäht, geben diese Funktionen "1" zurück. Wenn der Benutzer die Schaltfläche "Abbrechen " im Fenster "Debugnachricht" auswähbt, werden diese Funktionen sofort abgebrochen und geben keinen Wert zurück.
Der Aufruf _RPTF
von _RPT
Debugmakros _CrtDbgReport
zum Generieren der Debugberichte. Die breitformatigen Versionen dieser Makros sowie _ASSERT
, _ASSERTE
_RPTW
und _RPTFW
verwenden_CrtDbgReportW
, um ihre Debugberichte zu generieren. Wenn _CrtDbgReport
oder _CrtDbgReportW
zurückgeben 1, starten diese Makros den Debugger, wenn just-in-time (JIT)-Debugging aktiviert ist.
Hinweise
_CrtDbgReport
und _CrtDbgReportW
kann den Debugbericht an drei verschiedene Ziele senden: eine Debugberichtsdatei, einen Debugmonitor (visual Studio-Debugger) oder ein Debugnachrichtenfenster. Zum Angeben des Ziels oder der Ziele für jeden Berichtstyp werden zwei Konfigurationsfunktionen _CrtSetReportMode
verwendet _CrtSetReportFile
. Mithilfe dieser Funktionen können die Berichtsziele für die einzelnen Berichtstypen separat gesteuert werden. Beispielsweise ist es möglich, anzugeben, dass nur eine reportType
von _CRT_WARN
nur dem Debugmonitor übergeben wird, während ein reportType
Von-Element _CRT_ASSERT
sowohl zu einem Debugmeldungsfenster als auch zu einer benutzerdefinierten Berichtsdatei wechselt.
_CrtDbgReportW
ist die Breitzeichenversion von _CrtDbgReport
. Alle Ausgabe- und Zeichenfolgenparameter befinden sich in breiten Zeichenfolgen; andernfalls ist sie identisch mit der Einzelbyte-Zeichenversion.
_CrtDbgReport
und _CrtDbgReportW
erstellen Sie die Benutzernachricht für den Debugbericht, indem Sie die argument[n]
Argumente in die format
Zeichenfolge ersetzen, wobei die gleichen Regeln verwendet werden, die von den printf
Funktionen wprintf
definiert sind. Diese Funktionen generieren dann den Debugbericht und bestimmen das Ziel bzw. die Ziele gemäß der der für reportType
definierten aktuellen Berichtsmodi und Berichtsdatei. Wenn der Bericht an ein Debugmeldungsfenster gesendet wird, sind filename
, lineNumber
und moduleName
in den im Fenster angezeigten Informationen enthalten.
In der folgenden Tabelle werden die verfügbaren Optionen für den Berichtsmodus (bzw. die Berichtsmodi) und die Berichtsdatei sowie das resultierende Verhalten von _CrtDbgReport
und _CrtDbgReportW
aufgeführt. Diese Optionen werden als Bitkennzeichnungen in <crtdbg.h> definiert.
Berichtsmodus | Berichtsdatei | Verhalten von _CrtDbgReport und _CrtDbgReportW |
---|---|---|
_CRTDBG_MODE_DEBUG |
Nicht zutreffend | Schreibt Nachrichten mithilfe der Windows-API OutputDebugString . |
_CRTDBG_MODE_WNDW |
Nicht zutreffend | Ruft die Windows-API MessageBox auf, um das Meldungsfeld zu erstellen, um die Nachricht zusammen mit den Schaltflächen "Abbrechen", "Wiederholen" und "Ignorieren " anzuzeigen. Wenn ein Benutzer "Abbrechen" auswäht oder _CrtDbgReport _CrtDbgReport sofort abbricht. Wenn ein Benutzer " Wiederholen" auswäht, wird 1 zurückgegeben. Wenn ein Benutzer "Ignorieren" auswäht, wird die Ausführung fortgesetzt und _CrtDbgReport _CrtDbgReportW gibt "0" zurück. Die Option "Ignorieren", wenn eine Fehlerbedingung vorhanden ist, führt häufig zu einem nicht definierten Verhalten. |
_CRTDBG_MODE_FILE |
__HFILE |
Schreibt eine Nachricht in die vom Benutzer bereitgestellte HANDLE Nachricht mithilfe der Windows-API WriteFile und überprüft nicht die Gültigkeit des Dateihandles. Die Anwendung ist für das Öffnen der Berichtsdatei und das Übergeben eines gültigen Dateihandle verantwortlich. |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDERR |
Schreibt eine Meldung in stderr . |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDOUT |
Schreibt eine Meldung in stdout . |
Der Bericht entweder an ein Ziel, an zwei oder drei Ziele oder an kein Ziel gesendet werden. Weitere Informationen zum Angeben des Berichtsmodus oder der Berichtsdatei finden Sie unter den _CrtSetReportMode
und _CrtSetReportFile
den Funktionen. Weitere Informationen zur Verwendung der Debugmakros und Berichterstellungsfunktionen finden Sie unter Makros für die Berichterstellung.
Wenn Ihre Anwendung mehr Flexibilität benötigt als die von _CrtDbgReport
und _CrtDbgReportW
, können Sie Ihre eigene Berichterstellungsfunktion schreiben und in den C-Laufzeitbibliotheksberichtsmechanismus integrieren, indem Sie die _CrtSetReportHook
Funktion verwenden.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_CrtDbgReport |
<crtdbg.h> |
_CrtDbgReportW |
<crtdbg.h> |
_CrtDbgReport
und _CrtDbgReportW
sind Microsoft-Erweiterungen. Weitere Informationen finden Sie unter Kompatibilität.
Libraries
Nur Debugversionen von C-Laufzeitbibliotheken
Beispiel
// crt_crtdbgreport.c
#include <crtdbg.h>
int main(int argc, char *argv[]) {
#ifdef _DEBUG
_CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, argv[0], NULL);
#endif
}
Ein Beispiel zum Ändern der Berichtsfunktion finden Sie crt_dbg2
unter
Siehe auch
Debugroutinen
_CrtSetReportMode
_CrtSetReportFile
printf
, , _printf_l
wprintf
_wprintf_l
_DEBUG