디버그 루틴

C 런타임 라이브러리의 디버그 버전은 프로그램을 더 쉽게 디버그할 수 있는 여러 진단 서비스를 제공하며 개발자는 다음 작업을 수행할 수 있습니다.

  • 디버그하는 동안 런타임 함수에 대해 직접 한 단계씩 코드 실행

  • 어설션, 오류 및 예외 해결

  • 힙 할당 추적 및 메모리 누수 방지

  • 사용자에게 디버그 메시지 보고

    이러한 루틴을 사용하려면 _DEBUG 플래그를 정의해야 합니다. 이러한 루틴은 모두 응용 프로그램의 정품 빌드에서 아무 작업도 하지 않습니다. 새 디버그 루틴을 사용하는 방법에 대한 자세한 내용은 CRT 디버깅 기술을 참조하세요.

C 런타임 라이브러리 루틴의 디버그 버전

루틴 기능
_ASSERT 식을 계산하고 결과가 FALSE인 경우 디버그 보고서를 생성합니다.
_ASSERTE _ASSERT와 비슷하지만 생성된 보고서에 실패한 식을 포함합니다.
_CrtCheckMemory 디버그 힙에서 할당된 메모리 블록의 무결성을 확인합니다.
_CrtDbgBreak 중단점을 설정합니다.
_CrtDbgReport, _CrtDbgReportW 사용자 메시지가 포함된 디버그 보고서를 생성하고 이 보고서를 가능한 대상 3개로 보냅니다.
_CrtDoForAllClientObjects 힙의 모든 _CLIENT_BLOCK 형식에 대해 응용 프로그램에서 제공하는 함수를 호출합니다.
_CrtDumpMemoryLeaks 상당한 메모리 누수가 발생한 경우 디버그 힙의 모든 메모리 블록을 덤프합니다.
_CrtIsMemoryBlock 지정된 메모리 블록이 로컬 힙 내에 있고 유효한 디버그 힙 블록 형식 식별자를 포함하는지 확인합니다.
_CrtIsValidHeapPointer 지정된 포인터가 로컬 힙에 있는지 확인합니다.
_CrtIsValidPointer 지정된 메모리 범위가 읽기 및 쓰기에 적합한지 확인합니다.
_CrtMemCheckpoint 디버그 힙의 현재 상태를 가져오고 응용 프로그램에서 제공한 _CrtMemState 구조에 저장합니다.
_CrtMemDifference 두 개의 메모리 상태에 큰 차이가 있는지 비교하고 결과를 반환합니다.
_CrtMemDumpAllObjectsSince 지정된 검사점이 사용된 이후 또는 프로그램 실행 시작부터 힙에 있는 개체에 대한 정보를 덤프합니다.
_CrtMemDumpStatistics 지정된 메모리 상태에 대한 디버그 헤더 정보를 사용자가 읽을 수 있는 형식으로 덤프합니다.
_CrtReportBlockType 지정된 디버그 힙 블록 포인터와 연결된 블록 형식/하위 형식을 반환합니다.
_CrtSetAllocHook 클라이언트 정의 할당 함수를 C 런타임 디버그 메모리 할당 프로세스에 후크하여 함수를 설치합니다.
_CrtSetBreakAlloc 지정된 개체 할당 순서 번호에 대한 중단점을 설정합니다.
_CrtSetDbgFlag _crtDbgFlag 플래그의 상태를 검색 또는 수정하여 디버그 힙 관리자의 할당 동작을 제어합니다.
_CrtSetDumpClient _CLIENT_BLOCK 형식 메모리 블록을 덤프하기 위해 디버그 덤프 함수가 호출될 때마다 호출되는 응용 프로그램 정의 함수를 설치합니다.
_CrtSetReportFile _CrtDbgReport에서 특정 보고서의 대상으로 사용할 파일 또는 스트림을 확인합니다.
_CrtSetReportHook 클라이언트 정의 보고 함수를 C 런타임 디버그 보고 프로세스에 후크하여 해당 함수를 설치합니다.
_CrtSetReportHook2, _CrtSetReportHookW2 클라이언트 정의 보고 함수를 C 런타임 디버그 보고 프로세스에 후크하여 해당 함수를 설치하거나 제거합니다.
_CrtSetReportMode _CrtDbgReport에서 생성되는 특정 보고서 형식에 대한 일반 대상을 지정합니다.
_RPT[0,1,2,3,4] _CrtDbgReport를 서식 문자열 및 가변적인 개수의 인수와 함께 호출하여 디버그 보고서를 생성하는 방식으로 응용 프로그램의 진행 상황을 추적합니다. 소스 파일 및 줄 번호 정보를 제공합니다.
_RPTF[0,1,2,3,4] _RPTn 매크로와 비슷하지만 보고서 요청이 시작된 소스 파일 이름과 줄 번호를 제공합니다.
_calloc_dbg 디버깅 헤더에 대한 추가 공간이 있는 힙에서 지정된 개수의 메모리 블록을 할당하고 버퍼를 덮어씁니다.
_expand_dbg 블록을 확장하거나 축소하여 힙에서 지정된 메모리 블록의 크기를 조정합니다.
_free_dbg 힙에서 메모리 블록을 해제합니다.
_fullpath_dbg, _wfullpath_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 지정된 상대 경로 이름의 절대 또는 전체 경로 이름을 만듭니다.
_getcwd_dbg, _wgetcwd_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 현재 작업 디렉터리를 가져옵니다.
_malloc_dbg 디버깅 헤더에 대한 추가 공간이 있는 힙에서 메모리 블록을 할당하고 버퍼를 덮어씁니다.
_msize_dbg 힙에서 메모리 블록의 크기를 계산합니다.
_realloc_dbg 블록을 이동하거나 크기를 조정하여 힙에서 지정된 메모리 블록을 재할당합니다.
_strdup_dbg, _wcsdup_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 문자열을 복제합니다.
_tempnam_dbg, _wtempnam_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 임시 파일을 만들 때 사용할 수 있는 이름을 생성합니다.

디버그 루틴을 사용하여 디버깅 프로세스 중에 대부분의 기타 C 런타임 루틴에 대한 소스 코드를 단계별로 실행합니다. 그러나 Microsoft에서는 일부 기술을 독점적인 것으로 간주하고 이러한 루틴에 대한 소스 코드를 제공하지 않습니다. 이러한 루틴은 대부분 예외 처리 또는 부동 소수점 처리 그룹에 속하지만 몇몇 기타 루틴도 포함됩니다. 다음 표에 이러한 루틴이 나와 있습니다.

소스 코드 양식에서 사용할 수 없는 C 런타임 루틴

acos, acosf, acosl _fpclass _nextafter
asin _fpieee_flt pow
atan, atan2 _fpreset printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l*
_cabs frexp _scalb
ceil _hypot scanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l*
_chgsign, _chgsignf, _chgsignl _isnan setjmp
_clear87, _clearfp _j0 sin
_control87, _controlfp, __control87_2 _j1 sinh
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl _jn sqrt
cos ldexp _status87, _statusfp
cosh log tan
Exp log10 tanh
fabs _logb _y0
_finite longjmp _y1
floor _matherr _yn
fmod modf

* 이러한 대부분 루틴에 소스 코드를 사용할 수 있지만 소스 코드가 제공되지 않는 또 다른 루틴에 대한 내부 호출을 실행합니다.

응용 프로그램의 디버그 빌드에서 호출될 경우 일부 C 런타임 함수 및 C++ 연산자는 다르게 동작합니다. 응용 프로그램의 디버그 빌드를 수행하려면 _DEBUG 플래그를 정의하거나 C 런타임 라이브러리의 디버그 버전과 연결해야 합니다. 동작 차이는 대개 디버깅 프로세스를 지원하기 위해 루틴에서 제공된 추가적인 기능이나 정보로 구성됩니다. 다음 표에 이러한 루틴이 나와 있습니다.

응용 프로그램의 디버그 빌드에서 다르게 동작하는 루틴

C abort 루틴 C++ delete 연산자
C assert 루틴 C++ new 연산자

참고 항목

범주별 런타임 루틴
런타임 오류 검사