_ASSERT, _ASSERTE 매크로
결과가 False 일 때 식을 평가하고 디버그 보고서를 생성합니다.
_ASSERT(
booleanExpression
);
_ASSERTE(
booleanExpression
);
매개 변수
- booleanExpression
0이 아닌 값 또는 0으로 계산된 식(포인터 포함)입니다.
설명
_ASSERT 및 _ASSERTE 매크로는 디버깅 프로세스 동안 가정 검사를 위한 명료하고 간단한 메커니즘과 함께 응용 프로그램을 제공합니다. 이들은 응용 프로그램의 정식 버전 빌드에서의 호출로부터 대비하기 위한 #ifdef 문에서 묶어야 할 필요가 없으므로 매우 유연 합니다. 이러한 유연성은 _DEBUG 매크로를 사용하여 얻게됩니다. _ASSERT 및 _ASSERTE 은 _DEBUG 가 정의된 경우에만 사용할 수 있습니다. _DEBUG 가 정의되지 않았을 때, 이러한 매크로를 호출하면 전처리시기에 제거됩니다.
_ASSERT 및 _ASSERTE 은 그들의 booleanExpression 인수를 평가하고 결과가 false (0) 일 때, 진단 메시지를 출력하고 _CrtDbgReportW 을 호출하여 디버그 보고서를 생성합니다. _ASSERTE 가 메세지에서 실패한 식의 문자열을 포함하는 동안 _ASSERT 매크로는 간단한 진단 메시지를 출력합니다. 이러한 매크로는 booleanExpression 가 0이 아닌 값일때 아무 작업도 수행 하지 않습니다.
_ASSERT 및 _ASSERTE 은 모든 출력을 와이드 문자로 만드는 _CrtDbgReportW 을 호출하고, _ASSERTE 은 booleanExpression 에 유니코드 문자를 제대로 출력합니다.
_ASSERTE 매크로는 생성된 보고서에서 실패한 식을 지정하기 때문에 사용자는 응용 프로그램 소스 코드를 참조 하지 않고도 문제를 식별할 수 있습니다. 그러나 _ASSERTE 에 의해 계산된 모든 식에서의 단점은 응용 프로그램의 출력 (디버그 버전) 파일에 문자열 상수로 포함 됩니다. 따라서 _ASSERTE 이 많이 호출된 경우, 이 식은 출력 파일의 크기를 크게 키울 수 있습니다.
별도의 _CrtSetReportMode 및 _CrtSetReportFile 기능을 지정 하지 않으면, 기능 설정에 해당하는 팝업 대화 상자에 메시지가 나타납니다.
_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);
_CrtDbgReport 또는 _CrtDbgReportW 는 디버그 보고서를 생성 하고 현재 보고서 모드 및 _CRT_ASSERT 보고서 종류를 위해 정의된 파일에 따라 해당 대상을 결정합니다. 기본적으로 어설션 실패 및 오류는 디버그 메시지 창으로 이동합니다. _CrtSetReportMode 와 _CrtSetReportFile 함수들은 각 보고서 형식에 대한 대상을 정의하기 위해 사용됩니다.
대상이 디버그 메시지창이고 사용자가 재시도 버튼을 클릭할 때, _CrtDbgReport 또는 _CrtDbgReportW 이 1을 반환하고, 디버깅을 시작하기 위해 _ASSERT 및 _ASSERTE 매크로를 시작하며, 적시(JIT) 디버깅이 활성화됩니다.
보고 프로세스에 대한 자세한 내용은 _CrtDbgReport, _CrtDbgReportW 함수를 참조하십시오. 어설션 오류를 해결 및 이러한 매크로를 디버깅 오류 처리 메커니즘으로 사용하는 방법에 대한 자세한 내용은 확인 및 보고에 대한 매크로 사용 을 참조하십시오.
_RPT, _RPTF 디버그 매크로는 디버그 보고서를 생성하는데 사용될 수 있지만, 표현식을 평가하진 않습니다. _RPT 매크로는 간단한 보고서를 생성 합니다. _RPTF 매크로는 생성된 보고서에서 보고서 매크로를 호출한 소스 파일 및 줄 번호를 포함 합니다. _ASSERTE 매크로 이외에 ANSI assert 루틴은 프로그램 논리를 확인하기 위해 사용될 수 있습니다. 이 루틴은 라이브러리의 디버그 버전과 릴리스 버전에서 사용할 수 있습니다. 이러한 매크로의 와이드 문자 버전은 사용할 수 있습니다 (_RPTWn, _RPTFWn). 와이드 문자 버전은 와이드 문자 문자열이 모든 문자열 매개 변수 및 출력으로 사용되는 것을 제외하곤 좁은 문자 버전과 동일합니다.
비록 _ASSERT 및 _ASSERTE 매크로는 Crtdbg.h를 포함하여 얻게되지만, 응용프로그램은 이 매크로가 다른 런타임 함수들을 호출하기 때문에 다음 라이브러리들 중 하나를 사용하여 연결해야 합니다.
Libcmtd.lib
다중 스레드 정적 라이브러리, 디버그 버전.Msvcrtd.lib
Msvcr90d.dll, 디버그 버전의 라이브러리를 가져옵니다.
요구 사항
매크로 |
필수 헤더 |
---|---|
_ASSERT |
<crtdbg.h> |
_ASSERTE |
<crtdbg.h> |
예제
이 프로그램에서 _ASSERT 및 _ASSERTE 매크로에 대한 호출이 생성되어 string1 == string2 조건을 검사합니다. 조건이 실패 한 경우, 이러한 매크로들은 진단 메시지를 출력합니다. 또한 _RPTn 및 _RPTFn 매크로 그룹은 이 프로그램에서 printf 함수 대신으로 실행됩니다.
// crt_ASSERT_macro.c
// compile with: /D_DEBUG /MTd /Od /Zi /link /verbose:lib /debug
//
// This program uses the _ASSERT and _ASSERTE debugging macros.
//
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>
int main()
{
char *p1, *p2;
// The Reporting Mode and File must be specified
// before generating a debug report via an assert
// or report macro.
// This program sends all report types to STDOUT.
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
// Allocate and assign the pointer variables.
p1 = (char *)malloc(10);
strcpy_s(p1, 10, "I am p1");
p2 = (char *)malloc(10);
strcpy_s(p2, 10, "I am p2");
// Use the report macros as a debugging
// warning mechanism, similar to printf.
// Use the assert macros to check if the
// p1 and p2 variables are equivalent.
// If the expression fails, _ASSERTE will
// include a string representation of the
// failed expression in the report.
// _ASSERT does not include the
// expression in the generated report.
_RPT0(_CRT_WARN,
"Use the assert macros to evaluate the expression p1 == p2.\n");
_RPTF2(_CRT_WARN, "\n Will _ASSERT find '%s' == '%s' ?\n", p1, p2);
_ASSERT(p1 == p2);
_RPTF2(_CRT_WARN, "\n\n Will _ASSERTE find '%s' == '%s' ?\n",
p1, p2);
_ASSERTE(p1 == p2);
_RPT2(_CRT_ERROR, "'%s' != '%s'\n", p1, p2);
free(p2);
free(p1);
return 0;
}
해당 .NET Framework 항목
System::Diagnostics::Debug:: 어설션