본문 바로가기
C++ 200제/코딩 IT 정보

LeakDiag 사용법 - 메모리 누수 탐지 프로그램 (Memory Leak)

by vicddory 2018. 8. 4.

LeakDiag 사용법 - 메모리 누수 탐지 프로그램 (Memory Leak)


메모리 누수 탐지 툴인 LeakDiag에 대한 포스팅입니다.

위의 참조 사이트를 기준으로 요약된 글이 아래에 있습니다. 결과인 프로그램과 설치 파일들도 있으니 함께 참조하세요.


프로그램 다운로드


- 설치 파일 : Leakdiag125-process3.msi [링크]

- 측정 결과 그래프화 - LDGrapher_setup.msi [링크]


LeakDiag 특징


1. 소스 코드 삽입 없이 실행 중인 프로세스를 분석

2. 디버그 심볼이 추가될 경우 CallStack 확인 가능

3. 메모리 할당 / 해제를 모두 확인 가능

4. 할당인지 해제인지는 개발자가 판단

5. New, HeapAlloc, VirtualAlloc, malloc까지 확인 가능

6. 로그는 실시간으로 기록되지 않음

7. 측정 중에는 윈도우 전체 프로세스 성능에 영향을 미치지 않음

8. 사용자가 원하는 시점에 로그를 남길 수 있음

9. 측정 결과인 로그 파일은 LDGrapher에서 그래프로 확인이 가능


메인 화면


1. 프로세스 리스트에서 대상을 선택해 원하는 유형으로 측정이 가능

2. 디버깅할 프로세스의 목록에서 대상을 선택한 뒤 측정 유형을 결정


LeakDiag - Windows Heap AllocatorLeakDiag - Windows Heap Allocator


환경 설정 화면


1. Log file location : 측정 결과를 담는 로그를 저장할 폴더

2. Symbol search path : Windows 라이브러리 위치 설정

3. Resolve symbols when logging : 로그에 주소 번지와 함수명을 기재할지 설정

4. Use DbgHelp StackWalk API to walk stacks : CallStack 기록을 위해 DbgHelp.dll의 Stakwalk API를 사용

5. Max Stack Depth : CallStack의 추적 단계를 설정. 너무 높을 경우 개발자 입장에서 로그 해석이 어려워질 수 있음


LeakDiag - 옵션 창LeakDiag - 옵션 창


모니터링 시작

1. 측정 시작 이후, Stop로 측정 중단, Log로 로그 파일 생성이 가능


2. 여러 차례 측정을 시도할 경우, 프로세스 목록 창이 자동 갱신되지 않기에, 재측정 시엔, View – Refresh로 목록을 갱신하여 사용


3. 측정 도중에 LeakDiag의 Stop를 누르지 않고, 프로그램을 종료할 경우 LeakDiag도 정상적으로 종료되지 않기에 반드시 Stop를 먼저 누름


LeakDiag - 모니터링 시작LeakDiag - 모니터링 시작


모니터링 종료


1. 측정 중, Stop를 누르기 전에 Log를 누르면 기본 폴더에 로그가 저장됨

2. 비교 분석을 위해 최소 3차례 이상 기록하는 것이 필요


LeakDiag - 모니터링 종료 - 로그 파일 확인LeakDiag - 모니터링 종료 - 로그 파일 확인


LDGrapher

1. 저장된 로그 파일 3개 이상을 이용해 그래프화 가능(2개 이하는 불가)

2. X축은 시간의 흐름, Y축은 메모리 증가량

3. 아래 그림과 같이 프로그램 종료와 함께 모든 메모리 할당이 해제되는 소스 코드를 작성하는 것이 중요

4. 아래 첨부 그림처럼 View – Num Allocs로 확인된 그래프


LeakDiag - LDGrapher로 누수 확인LeakDiag - LDGrapher로 누수 확인


누수 확인 방법 - 1


하나의 선을 더블 클릭하여 상세 정보의 확인이 가능(아래는 예)


LeakDiag - LDGrapher 누수 확인 방법 1LeakDiag - LDGrapher 누수 확인 방법 1


누수 확인 방법 - 2


LeakDiag - LDGrapher 누수 확인 방법 2LeakDiag - LDGrapher 누수 확인 방법 2


누수 확인 방법 – 3


1. 로그는 xml로 저장되기에 텍스트 뷰어로 확인 가능

2. <xs:element name=“LEAKS”> 하위의 <STACK numallocs=“xxxx”….> 확인


LeakDiag - LDGrapher 누수 확인 방법 3LeakDiag - LDGrapher 누수 확인 방법 3


LeakDiag 사용법 - 메모리 누수 탐지 프로그램 (Memory Leak)

댓글