_CrtBreakAlloc을 사용 하 여 메모리 할당을 디버그 하는 방법


요약


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

추가 정보


_CrtDumpMemoryLeaks 등의 디버그 CRT 함수를 사용 하 여 메모리 누수를 추적 하는 경우 중괄호 ({})로 묶인 할당 번호를 자주 표시 합니다. 예를 들어 다음은 할당 번호 18의 메모리 누수입니다.
   Detected memory leaks!   Dumping objects ->   {18} normal block at 0x00660BE4, 10 bytes long   Data: <          > CD CD CD CD CD CD CD CD CD CD   Object dump complete. 
이 메모리가 할당 되기 바로 전에 중단점을 설정 하 여 호출 스택을 단계별로 진행 하 고이 메모리를 할당할 수 있는 함수를 확인 하는 것이 좋습니다. 디버그-CRT 함수를 _CrtSetBreakAlloc 하 여 중단할 할당 번호를 지정할 수 있습니다. 이 방법을 사용 하려면 할당 중단점을 설정 하려고 할 때마다 프로그램을 다시 컴파일해야 합니다. 다른 방법은 조사식 창을 사용 하 고 할당 중단점을 동적으로 설정 하는 것입니다. 이 방법에는 소스 코드를 변경 하거나 다시 컴파일할 필요가 없다는 장점이 있습니다. C 런타임에 정적으로 연결 하는 경우에는 변경 하려는 변수를 _crtBreakAlloc 라고 합니다. C 런타임에 동적으로 연결 하는 경우 조사식 창에서 변경 하려는 변수는 {, msvcr40d} * __p__crtBreakAlloc (), Visual c + + 4.0 또는 4.1을 사용 하는 경우입니다. 조사식 창에서 변경 하려는 변수는 Visual c + + 4.2 이상을 사용 하는 경우 {,, msvcrtd} * __p__crtBreakAlloc () 이어야 합니다. 컴파일하는 CRT 버전을 확인 하려면 다음을 수행 합니다.
  1. 빌드 메뉴에서 설정을 선택 합니다.
  2. 설정 대상: 창에서 빌드할 구성을 선택 합니다. C/c + + 탭을 선택한 다음 코드 생성 범주를 선택 합니다.
사용 중인 CRT 버전을 표시 하는 런타임 라이브러리 사용 대화 상자가 나타납니다. (이 설정이 비어 있는 경우에는 다음에 대 한 설정: 창에 한 개의 구성만 선택 되어 있는지 확인 합니다.) 할당 중단점을 동적으로 설정 하려면 다음 단계를 수행 합니다.
  1. 디버깅 세션을 시작 합니다. 빌드 메뉴에서 디버그-> 단계를 선택 합니다. "디버그 단일 스레드" 또는 "디버그 다중 스레드 CRT"를 사용 하는 경우 1a 단계를 수행 합니다. 그렇지 않으면 1b 단계를 수행 합니다.
    1. 조사식 창에 _crtBreakAlloc를 입력 합니다. 프로그램이 중지 하는 현재 할당 번호가 표시 됩니다. 프로그램이 처음 시작 되 면이 할당 번호는-1 이어야 합니다.
    2. Visual c + + 4.0 또는 4.1을 사용 하는 경우 조사식 창에 {,, msvcr40d} * __p__crtBreakAlloc ()을 입력 합니다. Visual c + + 4.2 이상을 사용 하는 경우 {,, msvcrtd} * __p__crtBreakAlloc ()를 입력 합니다. 프로그램이 중지 하는 현재 할당 번호가 표시 됩니다. 프로그램이 처음 시작 되 면이 할당 번호는-1 이어야 합니다.
  2. -1 값을 두 번 클릭 하 고 사용자 정의 중단점을 초래 하는 새 할당 번호를 입력 합니다.
  3. 디버그 메뉴에서 디버그-> 이동을 선택 합니다.
_CrtBreakAlloc에 대 한 자세한 내용은 온라인 도움말에서 "힙 할당 요청 추적"을 참조 하세요.