과거 Adplus, DebugDiag 와 같은 툴을 사용하여 Process crash 덤프를 수집하여 분석한 경험들이 있으실 겁니다. 아직 실행되지 않은 프로세스에 대해서 PID를 알지 못하더라도 프로세스 이름을 통해 미리 디버거를 준비할 수 있는데요~ 특정 프로세스가 실행되자마자 디버거를 attach 하기 전에 프로세스가 종료되는 경우, 이런 경우 ProcDump 를 통해 아직 실행되지 않은 프로세스에 대해서 Crash 덤프를 수집할 수 있습니다.
샘플 예제는 MSDTC 서비스가 시작되지 않고 예기치 않은 오류로 Crash 되는 현상에 대해서 미리 덤프 수집을 설정하는 방법입니다.
정상적으로 명령이 실행되면 아래와 같이 msdtc 프로세스의 exception 을 대기하는 상태로 기다리게 됩니다.
위에서 사용된 주요 옵션은 아래와 같습니다.
Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.
-t
Write a dump when the process terminates.
-ma
Write a dump file with all process memory. The default dump format only includes thread and handle information.
-w
Wait for the specified process to launch if it's not running.
아직 실행되지 않는 프로세스이므로 반드시 w 옵션 사용이 필요합니다.
실제 msdtc 프로세스가 crash 발생 시, 아래와 같이 dmp 파일이 생성되는 것을 볼 수 있습니다.
- 팁을 주신 HW, Jung 님께 감사드리며 :)
[참고자료]
ProcDump v7.01
https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
ProcDump 로 CPU 사용률 조건별 덤프 생성
http://laigo.kr/499
작성자 : Lai Go / 작성일자 : 2015.01.26