_Assert를 _ASSERTE 매크로
식을 평가 하 고 발생 하는 경우 디버그 보고서를 생성 False (디버그 버전에만 해당).
_ASSERT(
booleanExpression
);
_ASSERTE(
booleanExpression
);
매개 변수
- booleanExpression
0이 아닌 값 또는 0 (대 한 포인터를 포함 하 여) 식입니다.
설명
_ASSERT 및 _ASSERTE 매크로 응용 프로그램을 디버깅 프로세스 동안 가설 하는 단순한 메커니즘을 제공 합니다.에 포함 하지 않아도 되므로 매우 융통성이 있습니다 #ifdef 를 수 없게 하는 문을 호출 응용 프로그램의 일반 정품 빌드에.이러한 유연성을 사용 하 여 얻을 수 있습니다의 _DEBUG 매크로._ASSERT및 _ASSERTE 은 언제 사용할 수 있습니다 _DEBUG 정의 됩니다.때 _DEBUG 는 정의 되지 않은이 매크로에 대 한 호출 전처리 하는 동안 제거 됩니다.
_ASSERT및 _ASSERTE 평가 booleanExpression 인수를 사용 하 고 있을 때 그 결과 false (0) 진단 메시지와 전화를 인쇄 _CrtDbgReportW 디버그 보고서를 생성 합니다._ASSERT 매크로 단순한 진단 메시지를 출력 하지만 _ASSERTE 메시지에서 실패 한 식의 문자열 표시가 포함 되어 있습니다.이러한 매크로 아무 작업도 수행 하지 때 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 매크로에서 just-in-time (JIT) 디버깅을 사용 하도록 설정 하는 경우에 디버거를 시작 합니다.
보고 프로세스에 대 한 자세한 내용은 참조 하십시오 있는 _CrtDbgReport, _CrtDbgReportW 함수입니다.어설션 오류를 해결 하는이 매크로 디버깅 오류 처리 메커니즘을 사용 하는 방법에 대 한 자세한 내용은 참조 하십시오. 매크로 사용 하 여 확인 및 보고에 대 한.
해당 _RPT, _RPTF debug 매크로 디버그 보고서를 생성 하는 데 사용할 수 있는 수도 있지만 표현식을 평가 하지 않습니다._RPT 매크로 간단한 보고서를 생성 합니다._RPTF 매크로 생성 된 보고서를 보고서 매크로 호출 되었습니다 소스 파일 및 줄 번호를 포함 합니다.이외에 _ASSERTE 매크로, ANSI 어설션 루틴을 사용 하 여 프로그램 논리를 확인할 수 있습니다.이 루틴은 두는 디버그 버전과 릴리스 버전의 라이브러리에서 사용할 수 있습니다.이러한 매크로의 와이드 문자 버전을 사용할 수 있습니다 (_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:: 어설션