'UMDH'에 해당되는 글 2건
- 2013.01.08 problem of memory leak detect( malloc )
- 2010.04.05 Detect Resoruce Leak
위 내용 처럼 malloc 은 특정 버젼의 Windows OS에서는 FPO(frame pointer omission) 이 되어 있어서 해당 memory leak 에 대한 call stack 을 얻기가 어려운 점 이 있다.
http://support.microsoft.com/kb/268343/en-us
위 url 에서 windows 2003 sp 이후 부터 malloc의 FPO를 사용하지 않는다고 명시 되어 있다.
- Handle leak
- Process Explorer
- Process Explorer 은 특정 process에서 사용 중인 handle의 목록을 보여주며, status bar에 전체 handle의 개수를 나타내에 준다.( status bar에서 오른쪽 버튼 클릭 -> Select Status Bar Column -> Check Number of Handles )
- handle의 증가 추세와 어떤 handle이 원인 인지를 대략적으로 확인이 가능하다.
- !htrace extension
- windbg의 extension 명령으로 handle을 trace 하는 기능을 수행한다.
- 명령어
- !htrace -enable
- handle trace를 활성화 시킨다.
- 현재의 handle trace의 snapshot을 생성한다.
- !htrace - diff
- 기존의 snapshot과 현재 상태를 비교하여 OPEN - CLOSE 쌍이 맞지 않는 목록을 보여준다.
- 사용 방법
- !htrace -enable -> !htrace => OPEN , CLOSE 의 모든 과정을 화면에 보여줌.
- !htrace -enalbe -> !htrace -diff => OPEN, CLOSE 가 맞지 않는 handle trace만 화면에 보여줌.
- 유의 사항
- 다른 process에 의해서 injected 된 handle인 경우 stack trace가 inject 한 process 것이 나타나기 때문에 stack주소와 symbol이 잘못 표기된다. 이 경우 source process를 디버깅해서 해당 stack 주소를 이용하여 stack trace를 찾아낼수 있다.(ln 명령어 이용)
- Memory leak
- UMDH
- 사용방법
- gflag 의 stack backtrace를 활성화 시킨다.(100M는 임의로 정한 값이다)
- symbol 설정을 한다. 환경변수에 _NT_SYMBOL_PATH 추가 하고 symsrv*symsrv.dll*d:\localsymbols*http://msdl.microsoft.com/download/symbols
- tlist 를 이용하여 해당 process의 pid를 얻어낸다.
- umdh -p:pid > firstsnap.txt
- 프로그램 작업 수행
- umdh -p:pid > secondsnap.txt
- umdh firstsnap.txt secondsnap.txt -f:result.txt
- result.txt 를 확인한다.
- + 12d38 ( 12d38 - 0) 1b allocs BackTrace3462E88 : 메모리 사용량
- + 1b ( 1b - 0) BackTrace3462E88 allocations 할당 회수
- ntdll!RtlAllocateHeap+00000274 stack trace
- stack trace로 문제 지점을 확인한다.
- 유의 사항
- Vista 이상인 경우 해당 process가 관리자 level인 경우 umdh도 관리자 level로 실행시켜야 한다.
- BSTR 은 메모리 할당의 성능 향상을 위하여 cache 정책을 수행하며 이 경우 umdh는 정상적인 BSTR 메모리 할당도 누수라고 보고한다. 이것을 막기 위하여 환경변수를 설정(OANOCACHE=1)하면 cache가 off 된다.
- MSDN document
- LeakDiag
- CRT Debug Function
- Visual Leak Detector
- Memory Leak Detection Using Windbg
- Memory Leak Detection in MFC
- Common WinDbg Commands (Thematically Grouped)
- C/C++ Memory Corruption And Memory Leaks
- The Memory Management Reference
- Using LeakDiag to Debug Unmanaged Memory Leaks
- Heap: Pleasures and Pains