다음 내용은 "응용프로그램이 비정상 종료 되었을 때,Dr. Watson에 의해서 생성된 덤프파일을 WinDbg를 사용하여 분석하는 방법"에
대해서 설명하고 있습니다.
[단계 1] Dr. Watson 설정
?? 먼저, 응용프로그램의 비정상종료 되었을 때, Dr. Watson에 의해서 덤프파일이 생성될 수 있도록,
?? 다음과 같이 Dr. Watson을 시스템의 기본 디버거로 설정을 합니다.
??
?? 참고로, 위와 같이 설정은 다음 레지스트리에 기록이 됩니다.
?? [64비트 윈도우] \\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
[단계 2] Dr. Watson 설정확인
? 다음과 같이 Dr. Watson을 실행합니다.
?
? 그리고, 실행되어진 Dr. Watson 윈도우 응용프로그램에서 "크래쉬 덤프" 경로와
? "크레쉬 덤프 유형" 값을 적절히 설정합니다.
?
? (※ 참고로, "크레쉬 덤프 경로"는 응용프로그램이 비정상 종료될 때마다, 덤프파일이 생성되어지는 곳입니다. )
[단계 3] 테스트 용 소스 코드 작성
?? 설명의 편의상 다음과 같이, 비정상 종료되어지는 샘플 응용프로그램을 작성합니다.
#include <windows.h>
#include <stdio.h>
void BadPtrFunc(char *ptr)
{
*ptr = *ptr / 0; /* Null pointer exception + divide by zero */
}
int main(int argc, char **argv)
{
char *ptr = NULL;
BadPtrFunc(ptr);
return 0;
}
[단계 4] Visual studio 설정
?? 컴파일 되어지는 응용프로그램에 디버깅 정보가 포함되어질 수 있도록, 다음과 같이 프로젝트 설정을 수정합니다.
??
??
[단계 5] WinDbg 설치
?? 다음 웹사이트 경로를 참조하여, WinDbg를 설치합니다.
?? http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
??
?? (※ 참고로, WinDbg는 무료 프로그램입니다.)
[단계 6] 비정상 종료되는 응용프로그램 실행
[단계 3]을 통해서 만들어진 응용프로그램을 실행한 후, 덤프파일이 생성되어 있는지 확인합니다.
[단계 7] 덤프 파일 분석
덤프파일을 분석하기 위해서 WinDbg를 실행 한 후, 다음과 같이 덤프파일, 심볼 경로, 소스 경로를 설정합니다.
> 덤프파일 설정? [File] -> [Open Crash Dump???? Ctrl + D] 메뉴를 통해서 덤프파일을 설정합니다.
> 심볼경로 설정? [File] -> [Symbol File Path ? ???? Ctrl + S] 메뉴를 통해서 심볼경로를 설정합니다.
?? 참고로, 심볼경로는 Visual Studio를 사용하여 컴파일 할 때, 생성 되어지는 pdb 파일의 경로를 설정합니다.
> 소스파일 설정? [File] -> [Source File Path ???? ? Ctrl + P] 메뉴를 통해서 소스경로을 설정합니다.
위와 같이 설정이 완료되었으면, 다음과 같이 "!analyze -v" 명령어를 통해서 덤프파일을 분석합니다.
명령어를 입력한 후, 약 2~3초 정도 기다리면 "FAULTING_SOURCE_CODE" 정보를 WinDbg 커맨드 윈도우를 통해서
확인이 가능하며, 이 정보를 바탕으로 어느 부분이 잘못되었는지 확인 할 수 있습니다.
이 외에도 WinDbg 커맨드창에서는, "kn", ".frame", "dv", "dt"와 같은 유용한 디버깅 명령어들을 사용할 수 있습니다. (다음 그림 참고)
이 때, 특정 명령어의 쓰임새를 알고 싶을 경우에는 다음과 같은 명령어를 WinDbg의 커맨드 창에 입력하면 됩니다.
.hh <command>
예를 들어, 모든 지역 변수를 프린트 하는 dv 라는 명령어를 알고 싶으면
.hh dv 라고 입력하면, 다음과 같은 도움말이 화면에 표시 됩니다.
댓글 없음:
댓글 쓰기