_CrtDbgReport, _CrtDbgReportW
디버깅 메시지가 포함된 보고서를 생성하고 이 보고서를 가능한 대상 3개로 보냅니다(디버그 버전에만 해당).
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] ... );
매개 변수
reportType
보고서 형식: _CRT_WARN, _CRT_ERROR 및 _CRT_ASSERTfilename
어설션/보고서 또는 NULL이 발생한 소스 파일의 이름에 대한 포인터입니다.linenumber
assert/report 또는 NULL이 발생한 소스 파일의 줄 번호입니다.moduleName
어설션 또는 보고서가 발생한 모듈(.exe 또는 .dll)의 이름에 대한 포인터입니다.format
사용자 메시지를 만드는 데 사용되는 형식 컨트롤 문자열에 대한 포인터입니다.argument
format에서 사용하는 선택적 대체 인수입니다.
반환 값
모든 보고서 대상에 대해 _CrtDbgReport 및 _CrtDbgReportW는 오류가 발생하면 –1을 반환하고 오류가 발생하지 않으면 0을 반환합니다. 그러나 보고서 대상이 디버그 메시지 창이고 사용자가 다시 시도 단추를 클릭하면 이러한 함수는 1을 반환합니다. 사용자가 디버그 메시지 창에서 중단 단추를 클릭하면 이러한 함수가 즉시 중단되고 값을 반환하지 않습니다.
_RPT, _RPTF 디버그 매크로는 _CrtDbgReport를 호출하여 디버그 보고서를 생성합니다. 이러한 매크로와 _ASSERT[E], _RPTWn 및 _RPTFWn의 와이드 문자 버전은 _CrtDbgReportW를 사용하여 디버그 보고서를 생성합니다. JIT(Just-In-Time) 디버깅을 사용하도록 설정한 경우 _CrtDbgReport 또는 _CrtDbgReportW가 1을 반환하면 이러한 매크로는 디버거를 시작합니다.
설명
_CrtDbgReport 및 _CrtDbgReportW는 3가지 다른 대상, 즉 디버그 보고서 파일, 디버그 모니터(Visual Studio 디버그) 또는 디버그 메시지 창으로 디버거 보고서를 보낼 수 있습니다. 2가지 구성 함수인 _CrtSetReportMode 및 _CrtSetReportFile은 각 보고서 형식의 대상을 지정하는 데 사용됩니다. 이러한 함수를 사용하면 각 보고서 형식의 보고 대상을 개별적으로 제어할 수 있습니다. 예를 들어 _CRT_WARN의 reportType은 디버그 모니터로만 보내도록 하고 _CRT_ASSERT의 reportType은 디버그 메시지 창과 사용자 정의 보고서 파일로 보내도록 지정할 수 있습니다.
_CrtDbgReportW는 _CrtDbgReport의 와이드 문자 버전입니다. 이 함수의 모든 출력 및 문자열 매개 변수는 와이드 문자열에 있습니다. 이 점을 제외하면 이 함수는 싱글바이트 문자 버전과 동일합니다.
_CrtDbgReport 및 _CrtDbgReportW는 printf 또는 wprintf 함수에서 정의한 동일한 규칙을 통해 argument[n] 인수를 format 문자열로 대체하여 디버그 보고서에 대한 사용자 메시지를 만듭니다. 그런 다음 이러한 함수는 디버그 보고서를 생성하고 현재 보고서 모드와 reportType에 대해 정의된 파일을 기반으로 대상을 결정합니다. 보고서를 디버그 메시지 창으로 보내면 filename, lineNumber 및 moduleName이 창에 표시되는 정보에 포함됩니다.
다음 테이블은 사용 가능한 보고서 모드 및 파일 선택 항목과 _CrtDbgReport 및 _CrtDbgReportW의 결과 동작을 보여줍니다. 이러한 옵션은 <crtdbg.h>에 비트 플래그에 정의되어 있습니다.
보고서 모드 |
보고서 파일 |
_CrtDbgReport, _CrtDbgReportW 동작 |
---|---|---|
_CRTDBG_MODE_DEBUG |
해당 없음 |
Windows OutputDebugString API를 사용하여 메시지를 씁니다. |
_CRTDBG_MODE_WNDW |
해당 없음 |
Windows MessageBox API를 호출하여 중단, 다시 시도 및 무시 단추와 함께 메시지를 표시하는 메시지 상자를 만듭니다. 사용자가 중단을 클릭하면 _CrtDbgReport 또는 _CrtDbgReport가 즉시 중단됩니다. 사용자가 다시 시도를 클릭하면 1이 반환됩니다. 사용자가 무시를 클릭하면 계속해서 실행되고 _CrtDbgReport 및 _CrtDbgReportW가 0을 반환합니다. 오류 조건이 있는데 무시를 클릭하면 일반적으로 "정의되지 않은 동작"이 발생합니다. |
_CRTDBG_MODE_FILE |
__HFILE |
Windows WriteFile API를 사용하여 사용자가 제공한 HANDLE에 메시지를 쓰지만 파일 핸들의 유효성을 검사하지는 않습니다. 보고서 파일 열기 및 유효한 파일 핸들 전달은 응용 프로그램에서 실행합니다. |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDERR |
stderr에 메시지를 씁니다. |
_CRTDBG_MODE_FILE |
_CRTDBG_FILE_STDOUT |
stdout에 메시지를 씁니다. |
보고서는 1개, 2개 또는 3개 대상으로 보내거나 아무 대상으로도 보내지 않을 수 있습니다. 보고서 모드 및 보고서 파일 지정에 대한 자세한 내용은 _CrtSetReportMode 및 _CrtSetReportFile 함수를 참조하세요. 디버그 매크로 및 보고 함수 사용에 대한 자세한 내용은 보고서 매크로를 참조하세요.
응용 프로그램에 _CrtDbgReport 및 _CrtDbgReportW에서 제공하는 것보다 더 뛰어난 유연성이 필요한 경우 자체 보고 함수를 작성한 다음 _CrtSetReportHook 함수를 사용하여 C 런타임 라이브러리 보고 메커니즘에 연결할 수 있습니다.
요구 사항
루틴 |
필수 헤더 |
---|---|
_CrtDbgReport |
<crtdbg.h> |
_CrtDbgReportW |
<crtdbg.h> |
_CrtDbgReport 및 _CrtDbgReportW는 Microsoft 확장입니다. 자세한 내용은 호환성을 참조하세요.
라이브러리
디버그 버전의 유일한 C 런타임 라이브러리입니다.
예제
// crt_crtdbgreport.c
#include <crtdbg.h>
int main(int argc, char *argv[]) {
#ifdef _DEBUG
_CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, argv[0], NULL);
#endif
}
보고 함수 변경 방법의 예는 crt_dbg2를 참조하세요.