다음을 통해 공유


_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:: 어설션

참고 항목

참조

루틴을 디버깅 합니다.

_RPT, _RPTF, _RPTW, _RPTFW 매크로