디버그 루틴Debug Routines

C 런타임 라이브러리의 디버그 버전은 프로그램을 더 쉽게 디버그할 수 있는 여러 진단 서비스를 제공하며 개발자는 다음 작업을 수행할 수 있습니다.The debug version of the C run-time library supplies many diagnostic services that make debugging programs easier and allow developers to:

  • 디버그하는 동안 런타임 함수에 대해 직접 한 단계씩 코드 실행Step directly into run-time functions during debugging

  • 어설션, 오류 및 예외 해결Resolve assertions, errors, and exceptions

  • 힙 할당 추적 및 메모리 누수 방지Trace heap allocations and prevent memory leaks

  • 사용자에게 디버그 메시지 보고Report debug messages to the user

    이러한 루틴을 사용하려면 _DEBUG 플래그를 정의해야 합니다.To use these routines, the _DEBUG flag must be defined. 이러한 루틴은 모두 응용 프로그램의 정품 빌드에서 아무 작업도 하지 않습니다.All of these routines do nothing in a retail build of an application. 새 디버그 루틴을 사용하는 방법에 대한 자세한 내용은 CRT 디버깅 기술을 참조하세요.For more information on how to use the new debug routines, see CRT Debugging Techniques.

C 런타임 라이브러리 루틴의 디버그 버전Debug Versions of the C Run-Time Library Routines

루틴Routine 기능Use
_ASSERT_ASSERT 식을 계산하고 결과가 FALSE인 경우 디버그 보고서를 생성합니다.Evaluate an expression and generates a debug report when the result is FALSE
_ASSERTE_ASSERTE _ASSERT와 비슷하지만 생성된 보고서에 실패한 식을 포함합니다.Similar to _ASSERT, but includes the failed expression in the generated report
_CrtCheckMemory_CrtCheckMemory 디버그 힙에서 할당된 메모리 블록의 무결성을 확인합니다.Confirm the integrity of the memory blocks allocated on the debug heap
_CrtDbgBreak_CrtDbgBreak 중단점을 설정합니다.Sets a break point.
_CrtDbgReport, _CrtDbgReportW_CrtDbgReport, _CrtDbgReportW 사용자 메시지가 포함된 디버그 보고서를 생성하고 이 보고서를 가능한 대상 3개로 보냅니다.Generate a debug report with a user message and send the report to three possible destinations
_CrtDoForAllClientObjects_CrtDoForAllClientObjects 힙의 모든 _CLIENT_BLOCK 형식에 대해 응용 프로그램에서 제공하는 함수를 호출합니다.Call an application-supplied function for all _CLIENT_BLOCK types on the heap
_CrtDumpMemoryLeaks_CrtDumpMemoryLeaks 상당한 메모리 누수가 발생한 경우 디버그 힙의 모든 메모리 블록을 덤프합니다.Dump all of the memory blocks on the debug heap when a significant memory leak has occurred
_CrtIsMemoryBlock_CrtIsMemoryBlock 지정된 메모리 블록이 로컬 힙 내에 있고 유효한 디버그 힙 블록 형식 식별자를 포함하는지 확인합니다.Verify that a specified memory block is located within the local heap and that it has a valid debug heap block type identifier
_CrtIsValidHeapPointer_CrtIsValidHeapPointer 지정된 포인터가 로컬 힙에 있는지 확인합니다.Verifies that a specified pointer is in the local heap
_CrtIsValidPointer_CrtIsValidPointer 지정된 메모리 범위가 읽기 및 쓰기에 적합한지 확인합니다.Verify that a specified memory range is valid for reading and writing
_CrtMemCheckpoint_CrtMemCheckpoint 디버그 힙의 현재 상태를 가져오고 응용 프로그램에서 제공한 _CrtMemState 구조에 저장합니다.Obtain the current state of the debug heap and store it in an application-supplied _CrtMemState structure
_CrtMemDifference_CrtMemDifference 두 개의 메모리 상태에 큰 차이가 있는지 비교하고 결과를 반환합니다.Compare two memory states for significant differences and return the results
_CrtMemDumpAllObjectsSince_CrtMemDumpAllObjectsSince 지정된 검사점이 사용된 이후 또는 프로그램 실행 시작부터 힙에 있는 개체에 대한 정보를 덤프합니다.Dump information about objects on the heap since a specified checkpoint was taken or from the start of program execution
_CrtMemDumpStatistics_CrtMemDumpStatistics 지정된 메모리 상태에 대한 디버그 헤더 정보를 사용자가 읽을 수 있는 형식으로 덤프합니다.Dump the debug header information for a specified memory state in a user-readable form
_CrtReportBlockType_CrtReportBlockType 지정된 디버그 힙 블록 포인터와 연결된 블록 형식/하위 형식을 반환합니다.Returns the block type/subtype associated with a given debug heap block pointer.
_CrtSetAllocHook_CrtSetAllocHook 클라이언트 정의 할당 함수를 C 런타임 디버그 메모리 할당 프로세스에 후크하여 함수를 설치합니다.Install a client-defined allocation function by hooking it into the C run-time debug memory allocation process
_CrtSetBreakAlloc_CrtSetBreakAlloc 지정된 개체 할당 순서 번호에 대한 중단점을 설정합니다.Set a breakpoint on a specified object allocation order number
_CrtSetDbgFlag_CrtSetDbgFlag _crtDbgFlag 플래그의 상태를 검색 또는 수정하여 디버그 힙 관리자의 할당 동작을 제어합니다.Retrieve or modify the state of the _crtDbgFlag flag to control the allocation behavior of the debug heap manager
_CrtSetDumpClient_CrtSetDumpClient _CLIENT_BLOCK 형식 메모리 블록을 덤프하기 위해 디버그 덤프 함수가 호출될 때마다 호출되는 응용 프로그램 정의 함수를 설치합니다.Install an application-defined function that is called every time a debug dump function is called to dump _CLIENT_BLOCK type memory blocks
_CrtSetReportFile_CrtSetReportFile _CrtDbgReport에서 특정 보고서의 대상으로 사용할 파일 또는 스트림을 확인합니다.Identify the file or stream to be used as a destination for a specific report type by _CrtDbgReport
_CrtSetReportHook_CrtSetReportHook 클라이언트 정의 보고 함수를 C 런타임 디버그 보고 프로세스에 후크하여 해당 함수를 설치합니다.Install a client-defined reporting function by hooking it into the C run-time debug reporting process
_CrtSetReportHook2, _CrtSetReportHookW2_CrtSetReportHook2, _CrtSetReportHookW2 클라이언트 정의 보고 함수를 C 런타임 디버그 보고 프로세스에 후크하여 해당 함수를 설치하거나 제거합니다.Installs or uninstalls a client-defined reporting function by hooking it into the C run-time debug reporting process.
_CrtSetReportMode_CrtSetReportMode _CrtDbgReport에서 생성되는 특정 보고서 형식에 대한 일반 대상을 지정합니다.Specify the general destination(s) for a specific report type generated by _CrtDbgReport
_RPT[0,1,2,3,4]_RPT[0,1,2,3,4] _CrtDbgReport를 서식 문자열 및 가변적인 개수의 인수와 함께 호출하여 디버그 보고서를 생성하는 방식으로 응용 프로그램의 진행 상황을 추적합니다.Track the application's progress by generating a debug report by calling _CrtDbgReport with a format string and a variable number of arguments. 소스 파일 및 줄 번호 정보를 제공합니다.Provides no source file and line number information.
_RPTF[0,1,2,3,4]_RPTF[0,1,2,3,4] _RPTn 매크로와 비슷하지만 보고서 요청이 시작된 소스 파일 이름과 줄 번호를 제공합니다.Similar to the _RPTn macros, but provides the source file name and line number where the report request originated
_calloc_dbg_calloc_dbg 디버깅 헤더에 대한 추가 공간이 있는 힙에서 지정된 개수의 메모리 블록을 할당하고 버퍼를 덮어씁니다.Allocate a specified number of memory blocks on the heap with additional space for a debugging header and overwrite buffers
_expand_dbg_expand_dbg 블록을 확장하거나 축소하여 힙에서 지정된 메모리 블록의 크기를 조정합니다.Resize a specified block of memory on the heap by expanding or contracting the block
_free_dbg_free_dbg 힙에서 메모리 블록을 해제합니다.Free a block of memory on the heap
_fullpath_dbg, _wfullpath_dbg_fullpath_dbg, _wfullpath_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 지정된 상대 경로 이름의 절대 또는 전체 경로 이름을 만듭니다.Create an absolute or full path name for the specified relative path name, using _malloc_dbg to allocate memory.
_getcwd_dbg, _wgetcwd_dbg_getcwd_dbg, _wgetcwd_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 현재 작업 디렉터리를 가져옵니다.Get the current working directory, using _malloc_dbg to allocate memory.
_malloc_dbg_malloc_dbg 디버깅 헤더에 대한 추가 공간이 있는 힙에서 메모리 블록을 할당하고 버퍼를 덮어씁니다.Allocate a block of memory on the heap with additional space for a debugging header and overwrite buffers
_msize_dbg_msize_dbg 힙에서 메모리 블록의 크기를 계산합니다.Calculate the size of a block of memory on the heap
_realloc_dbg_realloc_dbg 블록을 이동하거나 크기를 조정하여 힙에서 지정된 메모리 블록을 재할당합니다.Reallocate a specified block of memory on the heap by moving and/or resizing the block
_strdup_dbg, _wcsdup_dbg_strdup_dbg, _wcsdup_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 문자열을 복제합니다.Duplicates a string, using _malloc_dbg to allocate memory.
_tempnam_dbg, _wtempnam_dbg_tempnam_dbg, _wtempnam_dbg 메모리를 할당하는 _malloc_dbg를 사용하여 임시 파일을 만들 때 사용할 수 있는 이름을 생성합니다.Generate names you can use to create temporary files, using _malloc_dbg to allocate memory.

디버그 루틴을 사용하여 디버깅 프로세스 중에 대부분의 기타 C 런타임 루틴에 대한 소스 코드를 단계별로 실행합니다.The debug routines can be used to step through the source code for most of the other C run-time routines during the debugging process. 그러나 Microsoft에서는 일부 기술을 독점적인 것으로 간주하고 이러한 루틴에 대한 소스 코드를 제공하지 않습니다.However, Microsoft considers some technology to be proprietary and, therefore, does not provide the source code for these routines. 이러한 루틴은 대부분 예외 처리 또는 부동 소수점 처리 그룹에 속하지만 몇몇 기타 루틴도 포함됩니다.Most of these routines belong to either the exception handling or floating-point processing groups, but a few others are included as well. 다음 표에 이러한 루틴이 나와 있습니다.The following table lists these routines.

소스 코드 양식에서 사용할 수 없는 C 런타임 루틴C Run-Time Routines That Are Not Available in Source Code Form

acos, acosf, acoslacos, acosf, acosl _fpclass_fpclass _nextafter_nextafter
asinasin _fpieee_flt_fpieee_flt powpow
atan, atan2atan, atan2 _fpreset_fpreset printf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_lprintf, _printf_l, wprintf, _wprintf_l, printf_s, _printf_s_l, wprintf_s, _wprintf_s_l
_cabs_cabs frexpfrexp _scalb_scalb
ceilceil _hypot_hypot scanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_lscanf, _scanf_l, wscanf, _wscanf_l, scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
_chgsign, _chgsignf, _chgsignl_chgsign, _chgsignf, _chgsignl _isnan_isnan setjmpsetjmp
_clear87, _clearfp_clear87, _clearfp _j0_j0 sinsin
_control87, _controlfp, __control87_2_control87, _controlfp, __control87_2 _j1_j1 sinhsinh
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignlcopysign, copysignf, copysignl, _copysign, _copysignf, _copysignl _jn_jn sqrtsqrt
coscos ldexpldexp _status87, _statusfp_status87, _statusfp
coshcosh loglog tantan
ExpExp log10log10 tanhtanh
fabsfabs _logb_logb _y0_y0
_finite_finite longjmplongjmp _y1_y1
floorfloor _matherr_matherr _yn_yn
fmodfmod modfmodf

* 이러한 대부분 루틴에 소스 코드를 사용할 수 있지만 소스 코드가 제공되지 않는 또 다른 루틴에 대한 내부 호출을 실행합니다.* Although source code is available for most of this routine, it makes an internal call to another routine for which source code is not provided.

응용 프로그램의 디버그 빌드에서 호출될 경우 일부 C 런타임 함수 및 C++ 연산자는 다르게 동작합니다.Some C run-time functions and C++ operators behave differently when called from a debug build of an application. 응용 프로그램의 디버그 빌드를 수행하려면 _DEBUG 플래그를 정의하거나 C 런타임 라이브러리의 디버그 버전과 연결해야 합니다. 동작 차이는 대개 디버깅 프로세스를 지원하기 위해 루틴에서 제공된 추가적인 기능이나 정보로 구성됩니다.(Note that a debug build of an application can be done by either defining the _DEBUG flag or by linking with a debug version of the C run-time library.) The behavioral differences usually consist of extra features or information provided by the routine to support the debugging process. 다음 표에 이러한 루틴이 나와 있습니다.The following table lists these routines.

응용 프로그램의 디버그 빌드에서 다르게 동작하는 루틴Routines that Behave Differently in a Debug Build of an Application

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

참고 항목See Also

범주별 런타임 루틴 Run-Time Routines by Category
런타임 오류 검사Run-Time Error Checking