다음을 통해 공유


방법: 메모리 할당 번호에 중단점 설정

업데이트: 2007년 11월

이 항목은 다음 언어에 적용됩니다.

Edition

Visual Basic

C#

C++

Web Developer

Express

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Standard

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

Pro 및 Team

항목이 적용되지 않음 항목이 적용되지 않음

네이티브 전용

항목이 적용되지 않음

표의 범례:

항목이 적용됨

해당

항목이 적용되지 않음

해당 없음

항목이 적용되지만 명령은 기본적으로 숨겨짐

명령은 기본적으로 숨겨져 있습니다.

참고:

표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

메모리 누수 보고서에 있는 파일 이름과 줄 번호를 보면 누수된 메모리가 할당된 위치를 알 수 있습니다. 그러나 메모리 할당 위치를 안다고 해서 반드시 문제를 식별할 수 있는 것은 아닙니다. 프로그램을 실행하는 도중에 할당이 여러 번 호출되지만 특정 호출에 대해서만 메모리 누수가 발생할 수 있습니다. 문제를 식별하려면 누수된 메모리가 할당된 위치와 누수 발생 조건을 알아야 합니다. 그러기 위해서는 메모리 할당 번호가 필요합니다. 메모리 할당 번호는 파일 이름과 줄 번호 다음의 중괄호에 표시됩니다. 예를 들어, 다음 출력에서 메모리 할당 번호는 18입니다. 이는 누수된 메모리가 18번째로 프로그램에 할당된 메모리 블록임을 뜻합니다.

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

프로그램을 실행하는 동안 CRT 라이브러리는 CRT 라이브러리나 MFC와 같은 다른 라이브러리가 할당한 메모리를 비롯하여 할당된 모든 메모리 블록을 계산합니다. 따라서 할당 번호가 N인 개체는 프로그램에 할당된 N 번째 개체입니다. 그러나 코드에서 할당한 N 번째 개체는 아닐 수도 있습니다. 대부분의 경우 그렇지 않습니다.

할당 번호를 사용하여 메모리가 할당된 위치에 중단점을 설정할 수 있습니다. 먼저 프로그램의 시작 부분에 위치 중단점을 설정하십시오. 이 위치에서 프로그램이 중단되면 간략한 조사식 대화 상자나 조사식 창에서 메모리 할당 중단점을 설정할 수 있습니다.

절차

조사식 창에서 메모리 할당 중단점을 설정하려면

  1. 조사식 창에서 이름 열에 다음 식을 입력합니다.

    _crtBreakAlloc
    

    CRT 라이브러리의 다중 스레드 DLL 버전을 사용할 경우(/MD 옵션) 다음과 같이 컨텍스트 연산자를 포함해야 합니다.

    {,,msvcr71d.dll}_crtBreakAlloc
    
  2. RETURN 키를 누릅니다.

    디버거에서 호출을 계산하고 값 열에 결과를 표시합니다. 메모리를 할당할 때 중단점을 설정하지 않은 경우에는 이 값이 –1입니다.

  3. 값 열에 있는 값을 중단할 메모리 할당 번호로 대체합니다. 예를 들어, 위의 출력에서는 중단할 메모리 할당 번호가 18입니다.

원하는 메모리 할당에 중단점을 설정한 다음 디버깅을 계속할 수 있습니다. 이전과 같은 조건에서 프로그램을 실행하려면 할당 순서가 변경되지 않도록 주의하십시오. 지정된 메모리 할당에서 프로그램이 중단되면 호출 스택 창과 다른 디버거 정보를 살펴 보고 메모리가 할당된 조건을 확인할 수 있습니다. 필요한 경우 해당 지점에서 프로그램을 계속 실행하면 개체의 진행 상황과 할당 취소가 제대로 이루어지지 않는 이유도 알 수 있습니다.

참고:

개체에 데이터 중단점을 설정하는 것이 좋습니다. 자세한 내용은 방법: 데이터 중단점 설정(네이티브 전용)을 참조하십시오.

대개 디버거에서 메모리 할당 중단점을 설정하는 것이 더 쉽지만 경우에 따라 코드에서 설정할 수도 있습니다.

코드에서 메모리 할당 중단점을 설정하려면

  • 다음과 같은 줄을 추가합니다(열 여덟째 메모리 할당인 경우).

    _crtBreakAlloc = 18;
    

_CrtSetBreakAlloc 함수를 대신 사용해도 같은 효과가 있습니다.

_CrtSetBreakAlloc(18);

참고 항목

작업

방법: 호출 스택 창 사용

개념

메모리 누수 탐지 및 격리

기타 리소스

변수 창