Share via


_crtBreakAlloc 사용하여 메모리 할당 디버그

이 문서에서는 를 사용하여 _crtBreakAlloc 메모리 할당을 디버그하는 방법을 설명합니다.

원래 제품 버전: Visual C++
원본 KB 번호: 151585

요약

CRT(디버그 C-런타임)를 사용하여 메모리 누수 추적 시 누수가 발생하는 메모리를 할당하기 직전에 중단점을 설정하는 것이 유용한 경우가 많습니다. 컴파일 시간 또는 런타임에 를 설정 _crtBreakAlloc 하면 특정 메모리 할당 지점에서 사용자 정의 중단점이 발생할 수 있습니다.

추가 정보

와 같은 Debug-CRT 함수를 사용하여 메모리 누수를 추적할 때 중괄호()로 _CrtDumpMemoryLeaks묶인 할당 번호가{} 자주 나타납니다. 예를 들어 할당 번호 18의 메모리 누수는 다음과 같습니다.

메모리 누수가 감지되었습니다!
개체 덤프 ->
{18} 0x00660BE4 10바이트 길이의 일반 블록
데이터: <> CD CD CD CD CD CD CD CD CD CD
개체 덤프가 완료되었습니다.

이 메모리가 할당되기 직전에 중단점을 설정하는 것이 유용하므로 호출 스택을 단계별로 실행하고 이 메모리가 할당되는 원인이 되는 함수를 확인할 수 있습니다. 중단할 할당 번호를 지정할 수 있는 Debug-CRT 함수 _CrtSetBreakAlloc 입니다. 이 방법을 사용하려면 할당 중단점을 설정할 때마다 프로그램을 다시 컴파일해야 합니다. 다른 방법은 조사식 창을 사용하고 할당 중단점을 동적으로 설정하는 것입니다. 이 메서드는 소스 코드를 변경하거나 다시 컴파일하지 않아도 됩니다.

정적으로 C 런타임에 연결하는 경우 변경하려는 변수를 라고 합니다 _crtBreakAlloc. C 런타임에 동적으로 연결하는 경우 조사식 창에서 변경하려는 변수는 Visual C++ 4.0 또는 4.1을 사용하는 경우입니다 {,,msvcr40d.dll}__p__crtBreakAlloc() . 조사식 창에서 변경하려는 변수는 Visual C++ 4.2 이상을 사용하는 경우여야 합니다 {,,msvcrtd.dll}__p__crtBreakAlloc() .

컴파일할 CRT 버전을 확인하려면 다음을 수행합니다.

  1. 빌드 메뉴에서 설정을 선택합니다.

  2. 설정: 창에서 빌드할 구성을 선택합니다. C/C++ 탭을 선택한 다음 코드 생성 범주를 선택합니다.

사용 중인 CRT 버전을 표시하려면 런타임 라이브러리 사용 대화 상자가 표시됩니다. (이 설정이 비어 있는 경우 설정 창에서 하나의 구성만 선택했는지 확인합니다.)

할당 중단점을 동적으로 설정하려면 다음 단계를 수행합니다.

  1. 디버깅 세션을 시작합니다. 빌드 메뉴에서 디버그 -> 단계별 시작을 선택합니다. "단일 스레드 디버그" 또는 "다중 스레드 CRT 디버그"를 사용하는 경우 1a단계를 수행합니다. 그렇지 않으면 1b단계를 따릅니다.

    1. 조사식 창에 _crtBreakAlloc 입력합니다. 프로그램이 중지되는 현재 할당 번호를 보여줍니다. 이 할당 번호는 프로그램이 처음 시작될 때 -1이어야 합니다.

    2. Visual C++ 4.0 또는 4.1을 사용하는 경우 조사식 창에 {,,msvcr40d.dll}__p__crtBreakAlloc() 를 입력합니다. Visual C++ 4.2 이상을 사용하는 경우 {,,msvcrtd.dll}__p__crtBreakAlloc() 를 입력합니다. 프로그램이 중지되는 현재 할당 번호를 보여줍니다. 이 할당 번호는 프로그램이 처음 시작될 때 -1이어야 합니다.

  2. -1 값을 두 번 클릭하고 사용자 정의 중단점을 발생시키는 새 할당 번호를 입력합니다.

  3. 디버그 메뉴에서 디버그 ->이동을 선택합니다.

에 대한 _crtBreakAlloc자세한 내용은 온라인 도움말에서 힙 할당 요청 추적 을 참조하세요.