ProcDump는 프로세스의 사용자 모드 덤프를 수집하는 CLI 기반의 Sysinternals 유틸리티 프로그램이다.
프로세스의 충돌 및 종료, 예외 처리, 또는 프로세서나 메모리 등의 성능 카운터가 특정 수치에 도달하는 등의 조건부 덤프 수집도 가능하다. ProcDump의 덤프 수집에는 두 가지의 결함을 지닌다:
- 현재 실행 중이거나, 혹은 ProcDump의
-x
매개변수로 실행된 프로세스에만 적용된다. - 동명의 프로세스가 여럿 존재하면 반드시 PID를 통해 덤프를 수집하고자 하는 프로세스를 지목해야 한다.
ProcDump는 아래의 덤프 종류를 생성할 수 있다.
매개변수 | 덤프 종류 | 설명 |
---|---|---|
-ma | 전체 덤프 | 프로세스의 사용자 공간 전체를 수집한다. |
-mm | 미니 덤프 | 프로세스의 사용자 공간 중에서 스레드 및 레지스터 위주로 수집하며, ProcDump의 기본 덤프이다. |
-mp | 미니플러스 덤프 (MiniPlus Dump) | 프로세스의 프로그램 이미지를 제외한 사용자 공간 전체를 수집한다. 덤프에서 제외된 프로그램 이미지 정보는 해당 프로그램 파일이 위치한 경로를 디버깅 도구(예. WinDbg)에 명시하여 보충할 수 있다. |
-mk | 커널 덤프 | 프로세스에 관여한 커널 스택의 덤프를 추가로 생성한다. 단, 해당 덤프는 절대로 커널 메모리 덤프가 아니다. |
ProcDump에서 덤프를 생성하는 조건을 다음과 같이 설정할 수 있다.
어플리케이션에서 처리하지 못한 예외(exception)가 발생, 즉 충돌이 일어나면 프로그램이 종료되기 전에 덤프를 수집하도록 하는 -e
매개변수가 있다. 해당 매개변수의 설명을 자세히 읽어보면 "first chance exception"이란 용어를 발견할 수 있는데, 이를 통해 예외에도 종류가 있다는 점을 확인할 수 있다.
만일 예외가 무엇인지 잘 모르겠으면 대표적인 예시로
0xC0000005
STATUS_ACCESS_VIOLATION 메모리 접근 오류가 존재한다.
디버깅 관점에서 예외는 두 가지로 나뉘어진다:
-
1차 시도 예외(First chance exceptions)
어플리케이션이 예외를 가장 처음으로 마주하였을 때를 가리킨다. 1차 시도 예외는 프로그램에 치명적인 문제가 있다는 것을 의미하지 않다;
try
-catch
등으로 훌륭한 예외 처리 코드가 마련되었다면, 1차 시도 예외의 발생 내역만 남긴 채 아무런 문제 없이 어플리케이션 실행을 이어간다. 디버깅 도구 설정을 통해 1차 시도 예외 때 어플리케이션 실행을 중단시켜 디버그 모드로 진입할 수 있다. -
2차 시도 예외(Second chance exceptions)
어플리케이션이 1차 시도에서 예외를 처리하지 못하였을 때, 디버깅 도구에서 이를 처리할 수 있도록 주어진 두 번째 기회를 가리킨다. 어플리케이션은 실행이 중단되고 디버그 모드에 진입하는 데, 디버거에서 2차 시도 예외를 무사히 처리하였으면 어플리케이션 실행이 재개될 수 있다. 허나, 디버깅 도구가 없다면 어플리케이션은 2차 시도 예외를 처리하지 못한 채 그래도 충돌로 이어져 종료된다.
GUI 창이 있는 어플리케이션이 최소 5초 동안 응답 없음에 놓여진 경우에 덤프를 수집하도록 하는 -h
매개변수가 있다.
어플리케이션의 리소스 사용량을 성능 카운터 기준에서 지정한 한계치를 초과하거나 미달하면 덤프를 수집하도록 할 수 있다.
성능 카운터 | 매개변수 | 비고 | |
---|---|---|---|
초과 | 미달 | ||
CPU 점유율 | -c | -cl | 퍼센트(%) 단위를 입력한다. |
커밋된 메모리 | -m | -ml | MB 단위를 입력한다. |
기타 | -p | -pl | 예시: "\Processor(_Total)\% Processor Time" |