Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지

Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지



Visual Studio 2015에는 "네이티브 메모리 진단"이 새로운 기능으로 탑재되어 있습니다.

Visual Studio 2015의 Visual C++의 새로운 기능

2. 네이티브 메모리 진단
a. 메모리 진단 세션(Ctrl+Alt+F2). 네이티브 응용 프로그램의 메모리 사용을 디버그 세션 중에 실시간으로 모니터링할 수 있습니다.
b. 메모리 스냅샷. 응용 프로그램의 힙 내용의 순간 이미지를 캡처합니다. 두 개의 메모리 스냅샷을 비교하여 힙 상태의 차이를 확인할 수 있습니다. 애플리케이션을 중지한 후 각 인스턴스의 오브젝트 유형, 인스턴스 값 및 할당 호출 스택이 표시됩니다. 각 스냅샷의 호출 트리가 스택 프레임별로 표시됩니다.

본 기능을 이용하여 어플리케이션의 메모리 누수를 검출해 봅니다.

조사 환경


  • Windows 10Pro
  • Visual Studio Community 2015

  • 조사 대상 프로그램



    Win32Project1.cpp
    #include "stdafx.h"
    #include "Win32Project1.h"
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, 
                        _In_ LPWSTR    lpCmdLine, _In_ int       nCmdShow)
    {
        while (MessageBox(NULL, TEXT("終了しますか?"), TEXT("確認"), MB_YESNO | MB_ICONQUESTION) != IDYES)
        {
            char* ch = new char[256]; // メモリリーク!
        }
    
        return 0;
    }
    

    메모리 누수 검출 절차



    1. 조사 대상 프로그램의 디버그 실행
    [디버그(D)]→[디버그 시작] 메뉴를 눌러 조사 대상 프로그램을 디버그 실행합니다.


    2. 처리 실행 전 스냅샷 생성
    [디버그(D)]→[모두 중단(H)] 메뉴를 눌러 프로그램을 일시 중단시킵니다.
    다음으로 [디버그(D)]→[진단 도구 표시] 메뉴를 눌러 네이티브 메모리 진단 도구를 표시시키고 [메모리 사용량] 탭의 [스냅샷 생성]을 눌러 처리 실행 전의 스냅샷을 만듭니다.


    3. 메모리 누수로 처리 실행
    [디버그(D)]→[계속(C)] 메뉴를 눌러 프로그램을 재개하고 해당 프로그램의 [아니오] 버튼을 눌러 메모리 누수를 수반하는 처리를 실행시킵니다.


    4. 처리 실행 후 스냅샷 생성
    [디버그(D)]→[모두 중단(H)] 메뉴를 눌러 프로그램을 일시 중단시킵니다.
    그런 다음 네이티브 메모리 진단 도구 창의 메모리 사용량 탭에서 스냅샷 생성을 눌러 처리 실행 후 스냅샷을 생성합니다.


    5. 스냅샷 비교
    네이티브 메모리 진단 도구 창의 "메모리 사용량"탭의 "할당(다른)"열에서 ↑ 항목을 눌러 스냅샷 간의 힙 차이를 표시합니다.



    이 차분 정보에 의해, Win32Project1.cpp의 9행째로 확보한 char 배열의 메모리 영역이 해방되지 않고, 256바이트의 메모리 누수가 발생하고 있는 것을 확인할 수 있었습니다.

    좋은 웹페이지 즐겨찾기