0054 - Dr. Memory 로 메모리 누수 확인하기
윈도우의 Visual Studio 에서는 Visual Leak Detector 사용하거나 리눅스의 QT Creator 에서는 Valgrind 를 사용하면 비교적 메모리 누수를 쉽게 찾을 수 있지만, 중간에 위치한 윈도우의 QT Creator 에서 메모리 누수를 찾는데는 기본으로 제공되는 Tool 들로는 찾기가 쉽지 않습니다.
서드 파티 툴인 닥터 메모리 (Dr. Memory) 를 사용하여 메모리 누수를 찾는 방법을 설명 드리겠습니다. 사용법은 경험 했던 다른 메모리 누수 도구들에 비해 아주 간편한 편입니다.
1. http://www.drmemory.org/ 에 가서 프로그램을 설치 합니다. 접근이 어려우면 아래 압축된 파일을 받아서 푼 뒤 설치 합니다.
DrMemory-Windows-1.9.0-4.z01
DrMemory-Windows-1.9.0-4.z02
DrMemory-Windows-1.9.0-4.z03
DrMemory-Windows-1.9.0-4.zip
2. 프로그램을 설치하면 아래와 같이 바탕 화면에 진단 도구 아이콘이 나타납니다.
실수로 진단 아이콘이 삭제 되어도 해당 실행 파일 (drmemory.exe) 을 바로가기 아이콘으로 만들어 사용하면 됩니다.
3. 메모리 누수 여부를 확인 하기 위해 예제 프로그램을 작성해 봅니다.
1) Project 생성
File - New File or or Project
Application -Qt Widgets Application
Name - untitile
Kit Selection - Desktop Qt 5.5.0 MinGW 32bit
Class Information - 그대로
Finish
2) Code 수정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
#include "mainwindow.h"
#include <QApplication>
#include <QDialog>
// main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QDialog *test = new QDialog();
test->show();
return a.exec();
}
|
cs |
Delete 없이 QDialog 객체를 동적으로 할당하여 실행 File 을 만들어 봅니다.
3) 끌어 넣어서 실행 후 결과 확인
결과 화면을 보면 5326 바이트의 누수가 있다는 것을 볼 수 있습니다.
4) 코드 교정 후 결과 확인
상위 창이 닫힐 때 자동으로 소멸자가 생성되는 지난 시간의 코드와 달리, 마법사를 사용하지 않고 직접 생성 했기에 이번에는 종료까지 직접 설정해야 합니다.
메모리 반환은 몇가지 방법이 있겠지만, 이번에는 Qt::WA_DeleteOnClose 속성을 객체에 부여하여 종료시 자동으로 반환하게 설정합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
// main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QDialog>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QDialog *test = new QDialog();
test->setAttribute(Qt::WA_DeleteOnClose);
test->show();
return a.exec();
}
|
cs |
실행 화면은 동일하지만, 보고서 내용은 다르게 나옵니다.
핸들/메모리 누수는 반복 수행시 의도치 않은 종료를 만들기 때문에 주의해서 관리하는게 좋습니다.
작업 파일
'소프트웨어 > Qt' 카테고리의 다른 글
0071 - HTML 태그를 인식하는 위젯 (0) | 2015.12.17 |
---|---|
0061 - Layout, Tab, Buddy (레이아웃, 탭, 버디) (0) | 2015.12.10 |
0053 - 윈도우에서 QT 응용 프로그램 바로 실행하기 (0) | 2015.11.09 |
0052 - 대화 창 더 알아 보기 (0) | 2015.09.25 |
0051 - 대화 창 표시하기 (0) | 2015.09.21 |