티스토리 뷰
목차
C++ VLD(Visual Leak Detector) 설치 사용법, 메모리 누수 방지
[C++ Memory Leak]
C++ VLD 다운로드
- Visual Leak Detector (vld) 1.0 - 476 Kb [링크]
- the 1.9d beta version of Visual Leak Detector (includes source) - 728 Kb [링크]
VLD 특징
1. 메모리 누수 지점의 소스 파일과 라인 번호 제공
2. 누수 지점의 덤프 데이터 제공
3. 누수 리포트에 세부 사항 포함
4. C++ 및 C의 New/Delete, malloc/free 모두 지원
5. 라이브러리 및 전체 소스 코드가 제공되어 사용자가 원하는 형태로 수정 가능
메모리 누수 확인 및 사용 방법
1. 라이브러리 파일 (vld.lib, vldmt.lib, vldmtdll.lib) 복사
C:\Program Files\Microsoft Visual Studio\VC98\Lib 에 복사
2. 헤더 파일 (vld.h, vldapi.h) 복사
C:\Program Files\Microsoft Visual Studio\VC98\Include에 복사
3. C++ 프로그램이 시작하는 소스 파일 (App.h나 main함수가 있는 파일)에 vld.h 파일을 포함
(1) #include "vld.h"를 최상위 라인에 적음
(2) 단, stdafx.h 파일을 포함할 경우, 그다음 라인에 적음
(4) 만약, OS가 Windows2000 또는 이하 버전이라면 dbghelp.dll 파일을 프로그램의 Debug 폴더에 복사
(5) 프로그램을 디버그 버전으로 빌드 (Visual Leak Detector는 디버그 모드에서 동작)
(6) 표현 예 (아래, 메모리 누수를 확인할 수 있는 문자열)
---------- Block 1199 at 0x04BE1058: 136 bytes ----------
Call Stack:
d:\Foobar\FooLog.cpp (26): FooLog::getInstance
d:\Foobar\FooMain.cpp (75): FooMain::init
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (578): __tmainCRTStartup
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): WinMainCRTStartup
0x759A3677 (File and line number not available): BaseThreadInitThunk
0x770C9D42 (File and line number not available): RtlInitializeExceptionChain
0x770C9D15 (File and line number not available): RtlInitializeExceptionChain
Data:
9C 33 2D 6B 74 2A 2D 6B C8 11 BE 04 00 00 00 00 .3-kt*-k ........
00 00 00 00 70 14 BB 6C 70 14 BB 6C 00 00 00 00 ....p..l p..l....
00 00 00 00 68 14 BB 6C 68 14 BB 6C 00 00 00 00 ....h..l h..l....
00 00 00 00 6C 14 BB 6C 6C 14 BB 6C 20 12 BE 04 ....l..l l..l....
00 00 00 00 CD 00 CD CD 00 00 00 00 01 CD CD CD ........ ........
68 14 BB 6C 78 33 2D 6B 00 00 00 00 00 00 00 00 h..lx3-k ........
00 00 00 00 01 02 00 00 06 00 00 00 00 00 00 00 ........ ........
00 00 00 00 00 00 00 00 88 11 BE 04 5C 10 BE 04 ........ ....\...
00 00 00 00 20 CD CD CD ........ ........
[C++ Memory Leak]
VLD 유의 사항
1. 사용자 프로그램 경로에 한글이 있으면 추적경로가 잘려서 제대로 나오지 않음.
2. 폴더나 프로그램 이름을 영문으로 수정하여 사용.
3. C++의 static, extern과 같이 프로그램 종료 직전에 해제하는 변수는 Memory Leak(메모리 누수)으로 보이는 경우가 있음.
C++ VLD(Visual Leak Detector) 설치 사용법, 메모리 누수 방지