디버그 루틴
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
연산자