1. 시작 > 모든 프로그램 > Debug Diagnostics Tool 1.1 > DebugDiag 1.1 (x86) 을 선택하셔서 DebugDiag 1.1 을 실행 하세요.
2. 기본 설정일 경우 아래와 같은 다이얼로그 박스가 기본적으로 표시됩니다. 그렇지 않은 경우 DebugDiag 의 메인 화면에서 “Add Rule” 버튼을 클릭 하시기 바랍니다.
3. Rule Type을 선택하는 화면에서 3번째 형태인 “Memory and Handle Leak”을 선택하시고 “Next”버튼을 클릭 하세요.
4. 현재 버젼에서는 DebugDiag의 LeakTrack Rule 을 이용해서 여러개의 프로세스를 동시에 감시할 수 없습니다. 아래 그림과 같이 현재 실행 중인 프로세스 중에 문제 프로세스를 선택하시고 “Next”를 선택 합니다.
5. 다음 화면에서 아래 그림과 같이 Leak Rule을 설정 합니다. 일단 프로세스에 대한 Leak Rule의 작동과 동시에 Tracking을 시작하도록 하고
6. 원래 10개의 덤프를 수집하도록 한 “Maximum number of userdumps created by this rule”을 적절한 값을 설정해 주시기 바랍니다. 아래 그림에서는 5로 변경해 놓은 상태 입니다.
7. 좀더 자세한 모니터링을 위해서 화면 중간의 “Configure…” 버튼을 클릭 합니다.
8. 새로 표시되는 아래와 같은 다이얼로그 박스 화면에서 “Generate a userdump when virtual bytes reach” 를 설정하세요.
9. 이경우 프로세스의 메모리 사용량이 500메가 바이트가 넘는 시점 부터 덤프를 생성하기 시작합니다. 프로세스 초기 실행시 메모리 사용량에 따라서 이값을 변경해 주시면 됩니다.
즉, 최초 실행 시 Private Bytes가 200메가 바이트라면 이값을 250메가 바이트로 설정해 주시면 메모리 사용량이 증가하기 시작하는 시점에 덤프를 생성하기 시작합니다.
10. LeakTrace은 프로세스 실행시에 메모리나 핸들을 사용하는 콜들을 Hooking해서 관련 Call이 일어나는 Thread의 Stack Trace를 메모리에 저장하게 됩니다. 이들 메모리에 의해서 실제 프로세스에서 나타나는 메모리 문제가 좀더 빨리 진행 될 수도 있으니 유의 하시기 바랍니다.
11. “add each addition ???MB there after” 를 선택 하시면 이후 어느 정도 메모리가 증가할 때 마다 추가적으로 덤프를 수집하도록 할 수 있습니다. 아래 설정에서는 200 메가 바이트가 증가하게 되면 덤프를 수집하도록 해 놨습니다.
12. 만일 Leak과 함께 Crash 현상이 같이 발생하는 경우 “Auto-create a crash rule to get userdump on unexpected process exit.”를 선택 하시면 프로세스 종료시에 덤프가 생성 됩니다. 이는 Hang과 Crash를 동시에 감시하도록 합니다.
13. “Save & Close” 버튼을 클릭하셔서 새로 표시된 다이얼로그 박스를 닫으신 후 “Next” 버튼을 클릭하세요.
14. 다음 화면에서 새로생성된 “Rule”의 이름과 덤프가 저장될 기본 위치를 확인 하세요.
15. “Next” 버튼을 클릭하세요.
16. 마지막으로 “Activate the rule now”를 선택 하셔서 Rule이 바로 모니터링을 시작하도록 하신 후 “Finish” 버튼을 클릭 하세요.
17. 여러개의 프로세스에 대한 LeakTrack을 하고 싶으신 경우 각각의 프로세스에 대해서 별도의 Rule을 추가하시거나 아래 그림과 같이 개별 프로세스에 대한 LeakTrace을 Eanble하시고 메모리 상태를 감시하면서 감시하시면서 Hang Dump를 수집하실 수 있습니다.
* LeakTrack이 Enable된 프로세스는 아래 그림과 같이 “LeakTrack Status” column에 “Tracking”이라고 표시가 됩니다.
Private Bytes와 Virtual Bytes 및 성능모니터로 Leak 을 확인하는 방법은 아래의 링크 내용을 참고하세요.
Using Performance Monitor to Find a User-Mode Memory Leak
http://msdn.microsoft.com/en-us/library/cc267846.aspx
The Private Bytes counter indicates the total amount of memory that a process has allocated, not including memory shared with other processes.
The Virtual Bytes counter indicates the current size of the virtual address space that the process is using.