[개요]
- 이 문서는 어플리케이션 프로세스의 메모리덤프를 생성하는 방법을 기술합니다. 블루스크린(BSoD) 등과 관련된 커널메모리 덤프는 다루지 않습니다.
- 기술지원 담당자 등 자신이 개발하지 않은 프로세스의 메모리덤프를 작성해야 하는 분들을 위해 작성되었습니다.
[프로세스 Crash 발생시 메모리덤프 생성하기]
- 프로세스에 오류가 발생하여 Crash될 때 자동으로 덤프를 생성하는 방법입니다.
- Crash가 발생하기 전에 미리 설정해놓아야 합니다.
[방법1] procdump를 이용하는 방법
- 다음의 위치에서 procdump.exe를 다운로드받아 임의의 위치에 압축해제합니다. (예 : C:\temp )
https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
- 관리자 권한으로 커맨드 쉘(cmd.exe)을 실행하여 다음의 명령을 실행합니다. (폴더 경로를 생략하는 경우 procdump.exe가 존재하는 위치에 생성됩니다.
procdump.exe -ma -i [덤프파일 생성할 폴더경로]
- 이제 시스템에서 어떤 프로세스든 비정상 종료하게 되면 메모리덤프 파일이 생성됩니다.
- 메모리덤프 설정을 해제하려면 다음과 같이 명령을 입력하면 됩니다.
procdump.exe -u
[방법2] WER (Windows Error Reporting)을 이용하는 방법
- Vista 이후부터 윈도우즈에서 실행중인 프로세스가 오류를 일으켜 Crash가 발생하면 메모리덤프를 생성하고 Microsoft로 전송하는 기능이 생겼습니다.
- 기본설정의 경우 Microsoft로 전송된 메모리덤프는 삭제되는데, 다음의 레지스트리 위치에 키를 생성하고 값을 설정하면 메모리덤프를 로컬에 남길 수 있습니다.
키 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
값이름 : DumpFolder
Type : REG_EXPANDSZ
값 : C:\temp\dump
값이름 : DumpType
Type : REG_DWORD
값 : 2
자세한 내용은 다음의 링크를 참조하시기 바랍니다.
https://docs.microsoft.com/ko-kr/windows/desktop/wer/collecting-user-mode-dumps
[방법3] Dr.Watson을 사용하는 방법
- WindowsXP에서 사용하는 방법입니다.
- 다음의 링크를 참조하시기 바랍니다.
[실행중인 프로세스의 메모리덤프 생성]
- 오류 없이 실행중인 프로세스의 메모리덤프를 생성하는 방법입니다.
- 주로 Hang, DeadLock, CPU과점유 등의 이슈가 발생한 프로세스의 원인을 분석할 때 필요합니다.
[방법1] 작업관리자를 이용하는 방법
1. 다음 스크린샷을 참고하시기 바랍니다.
2. 메모리덤프는 %temp% 폴더에 생깁니다. (시작 > 실행 > 명령창에 %temp% 를 명령하고 엔터치면 바로 이동이 가능합니다.)
[방법2] procdump 를 이용하는 방법
1. 별도의 실행파일을 다운로드받아야 한다는 번거로움이 있지만, 스크립트 등을 이용해 자동화할 수 있고 'CPU 80% 이상 점유하는 경우에 덤프 생성' 등 다양한 기능을 사용할 수 있습니다. (procdump /? 참조)
2. 관리자 권한 커맨드 쉘에서 다음과 같이 입력하면 됩니다.
procdump.exe notepad.exe (프로세스 이름으로 덤프 : 매치되는 프로세스가 1개인 경우에 한함)
procdump.exe 12776 (프로세스ID)
'C++ > Debug' 카테고리의 다른 글
pdb가 맞지 않을 때 연결하기 (chkmatch) (0) | 2022.02.17 |
---|---|
OFFLINE 에서 메모리 덤프를 분석할 때 필요한 TIP (0) | 2020.07.29 |
WinDbg 디버깅 교육 (2) x86 stack inside (0) | 2018.01.09 |
WinDbg 디버깅 교육 (1) 디버깅 개론 (0) | 2018.01.08 |
WinDbg 라이브디버깅 시 소스창에서 BreakPoint가 설정되지 않는 문제 (Fail to set BP via WinDbg Source Window) (0) | 2016.12.26 |