Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지
Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지
Visual Studio 2015에는 "네이티브 메모리 진단"이 새로운 기능으로 탑재되어 있습니다.
Visual Studio 2015의 Visual C++의 새로운 기능
2. 네이티브 메모리 진단
a. 메모리 진단 세션(Ctrl+Alt+F2). 네이티브 응용 프로그램의 메모리 사용을 디버그 세션 중에 실시간으로 모니터링할 수 있습니다.
b. 메모리 스냅샷. 응용 프로그램의 힙 내용의 순간 이미지를 캡처합니다. 두 개의 메모리 스냅샷을 비교하여 힙 상태의 차이를 확인할 수 있습니다. 애플리케이션을 중지한 후 각 인스턴스의 오브젝트 유형, 인스턴스 값 및 할당 호출 스택이 표시됩니다. 각 스냅샷의 호출 트리가 스택 프레임별로 표시됩니다.
본 기능을 이용하여 어플리케이션의 메모리 누수를 검출해 봅니다.
조사 환경
조사 대상 프로그램
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바이트의 메모리 누수가 발생하고 있는 것을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryo-pinus/items/8141c749168ea321937c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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바이트의 메모리 누수가 발생하고 있는 것을 확인할 수 있었습니다.
Reference
이 문제에 관하여(Visual Studio 2015의 기본 메모리 진단 기능을 사용하여 메모리 누수 감지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryo-pinus/items/8141c749168ea321937c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)