다음을 통해 공유


로그 비교 해석

시간이 지남에 따라 동일한 프로세스의 여러 User-Mode 덤프 힙(UMDH) 로그를 생성할 수 있습니다. 그런 다음 UMDH를 사용하여 로그를 비교하고 평가판 간에 가장 큰 증가된 호출 스택 할당을 확인할 수 있습니다.

예를 들어 다음 명령은 Log1.txt 및 Log2.txt 두 개의 UMDH 로그를 비교하도록 UMDH에 지시하고 출력을 세 번째 파일인 Compare.txt 리디렉션합니다.

umdh -v Log1.txt Log2.txt > Compare.txt

결과 Compare.txt 파일은 각 로그에 기록된 호출 스택을 나열하고 각 스택에 대해 로그 파일 간의 힙 할당 변경 사항을 표시합니다.

예를 들어 파일의 다음 줄은 "Backtrace00053"이라는 레이블이 지정된 호출 스택의 함수에 대한 할당 크기 변경을 보여 줍니다.

Log1.txt 스택의 호출은 40,432(0x9DF0) 바이트를 차지하지만, Log2.txt 동일한 호출 스택은 61,712(0xF110) 바이트를 차지하며, 21,280바이트(0x5320) 바이트 차이입니다.

+ 5320 (f110 - 9df0) 3a allocs BackTrace00053 
Total increase == 5320

할당에 대한 스택은 다음과 같습니다.

ntdll!RtlDebugAllocateHeap+0x000000FD
ntdll!RtlAllocateHeapSlowly+0x0000005A
ntdll!RtlAllocateHeap+0x00000808
MyApp!_heap_alloc_base+0x00000069
MyApp!_heap_alloc_dbg+0x000001A2
MyApp!_nh_malloc_dbg+0x00000023
MyApp!_nh_malloc+0x00000016
MyApp!operator new+0x0000000E
MyApp!LeakyFunc+0x0000001E
MyApp!main+0x0000002C
MyApp!mainCRTStartup+0x000000FC
KERNEL32!BaseProcessStart+0x0000003D

호출 스택을 검사하면 LeakyFunc 함수가 Visual C++ 런타임 라이브러리를 사용하여 메모리를 할당하고 있음을 알 수 있습니다. 다른 로그 파일을 검사하면 시간이 지남에 따라 할당이 증가하는 것으로 표시되면 힙에서 할당된 메모리가 해제되지 않는다는 결론을 내릴 수 있습니다.

로그 파일 분석을 위한 기호 파일

UMDH 로그를 만드는 로깅 컴퓨터 와 UMDH 로그를 분석하는 분석 컴퓨터 라는 두 대의 컴퓨터가 있다고 가정해 보겠습니다. 분석 컴퓨터의 기호 경로는 로그를 만들 때 로깅 컴퓨터에 로드된 Windows 버전의 기호를 가리킵니다. 분석 컴퓨터의 기호 경로를 기호 서버로 가리키지 마세요. 이렇게 하면 UMDH는 분석 컴퓨터에서 실행되는 Windows 버전에 대한 기호를 검색하고 UMDH는 의미 있는 결과를 표시하지 않습니다.

참고 항목

UMDH를 사용하여 User-Mode 메모리 누수 찾기