다음을 통해 공유


디버그 루틴

C 런타임 라이브러리의 디버그 버전은 디버깅 프로그램을 더 쉽게 만들고 개발자가 다음 작업을 수행할 수 있도록 하는 많은 진단 서비스를 제공합니다.

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

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

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

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

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

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

루틴에서 반환된 값 사용할 용어
_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 런타임 루틴

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

소스 코드는 대부분의 printf 루틴에서 scanf 사용할 수 있지만 소스 코드가 제공되지 않는 다른 루틴을 내부적으로 호출합니다.

애플리케이션의 디버그 빌드에서 다르게 동작하는 루틴

애플리케이션의 디버그 빌드에서 호출될 경우 일부 C 런타임 함수 및 C++ 연산자는 다르게 동작합니다. (플래그를 정의 _DEBUG 하거나 C 런타임 라이브러리의 디버그 버전과 연결하여 애플리케이션의 디버그 빌드를 만들 수 있습니다.) 동작 차이는 일반적으로 디버깅 프로세스를 지원하기 위해 루틴에서 제공하는 추가 기능 또는 정보로 구성됩니다. 다음 표에 이러한 루틴이 나와 있습니다.

C abort 루틴

C assert 루틴

C++ delete 연산자

C++ new 연산자

참고 항목

범주별 유버니설 C 런타임 루틴
런타임 오류 검사