본문 바로가기

카테고리 없음

윈디버그 windbg windebug

Minidump 파일을 간단하게 분석하는 방법을 알아봅니다.

 

출처 : 디바이스 드라이버 개발자 커뮤니티에서 Mamathas라는 분이 쓰신 WinDbg를 이용한 미니덤프 분석방법 이라는 문서를 읽고 요약 및 설명을 추가 해봤습니다.(원문 http://www.driveronline.org/bbs/view.asp?tb=artclep&no=23)


먼저 exception 상황을 만들어서 Minidump파일(.dmp)을 생성하고 심볼파일(.pdb)을 잘 보관합니다.
Debugging Tools for Windows 를 다운받아서 설치합니다.
* 설치된 WinDbg를 실행합니다.
미니덤프 오픈 : File | Open Crash Dump -> Minidump 파일 선택
여러가지 정보가 표시됩니다.

 

심볼이 제대로 로드 되었는지 확인하기 위해 Debug | Modules 를 선택합니다.

Name에 현재 Application이 표시되어 있는 것을 찾아서 Simbol file항목을 보면 제대로 로드를 못했을 경우 Application 실행파일 이름이 표시됩니다.

File | Symbol File Path를 선택하고 심볼파일(.pdb)이 있는 path를 지정해줍니다.

명령창에 !sym noisy를 입력하여 windbg가 어떻게 심볼을 찾는지에 대한 정보보기 모드를 on 합니다.(필수는 아님)

.reload /f 를 입력하여 심볼을 로드합니다.

다시 Modules 창을 열어서 Symbol File항목에 적절한 pdb 파일을 표시하는지 확인합니다.

!analyze –v 를 입력하여 어느 부분에서 exception이 발생했는지 정보를 확인합니다.

출력되는 정보 중 STACK_TEXT를 보면 스택 정보가 표시됩니다.

 

.ecxr 명령을 입력하여 exception과 관련된 context report를 확인합니다.

View | Call Stack을 호출하시면 스택 정보를 볼 수 있고, source 버튼을 클릭하시면 소스정보도 같이 표시됩니다.

 

View | Locals를 호출하면 로컬변수들을 볼 수 있습니다. 


vs.net 으로 보는 방법
덤프, 심볼, 실행파일을 한 폴더에 두고 vs.net으로 덤프를 열고(탐색기에서 더블클릭해야 되더군요) 디버깅 시작(F5)하면  exception이 발생한 부분의 소스를 가리킵니다. 소스가 변경되었다면 부근(?)을 가리킵니다.

출처 :  까먹엇네요 -_- 퍼올때 출처 적은줄 알앗는데 .. 킁..