반응형

예전에 win debug로 crash 난 부분 소스위치 찾는 간단한 동작을 확인한 적 이 있었는데,

 

그것보단 좀 자세히 다뤄봅니다.

 

 

실행될 binary(exe) 파일을 실행하여 재현하기전에 할 일이 있습니다.

 

1. pdb 파일을 생성해야합니다.

 

참고로 저는 비쥬얼 스튜디오(visual studio 2010에서 했습니다.)

 



 

프로젝트 속성에 가면, C/C++에 일반에 가시면, 디버그정보 형식이 있습니다.

 

- 프로그램 데이타베이스(/Zi)

- 편집하여 계속하기 프로그램 데이터베이스(/ZI)

 

이렇게 두가지중 아무거나 선택해줍시다. 다만,, Zi (프로그램 데이타베이스)를 추천해드리고 싶네요.

ZI는 기존에 설정해둔 프로젝트 속성이 있다면, 충돌날 우려가 있기 떄문입니다.

 

그리고,

 

 



 

링커에 디버깅을 가시면, 디버그 정보 생성이 있습니다.

 

- 예 를 눌러줍니다.

 

이렇게 하고 다시 빌드하면, 디버그정보파일(project name.pdb)이 생성됩니다. 그 프로젝트별 pdb가 생성된폴더를 윈디버그(windbg)에서는 symbol folder(심폴폴더)라고 합니다.

 

 

2. symbol file 위치를 등록해줘야 합니다.

 

windbg를 실행시키면

 



 

빨간 테두리...(Symbol File Path)를 클릭합니다.

 

직접 폴더들을 다이얼로그를 통해서 쭉쭉 넣으셔도 되고,

 

[심볼폴더];[심볼폴더2];[...];SRV*C:\websymbol*http://msdl.microsoft.com/download/symbols

 

이런식으로 세미콜론(;)구분자를 이용해서 붙이셔도 됩니다.

 

(SRV*...으로 시작하는건 web symbol이라고 해요... 참고)

 

 

3. cmd 창을 열어서, windbg의 실행파일이 있는 위치로 가셔서 windbg -I (대문자 i)를 실행합니다.

 



 

그러면 windbg가 실행되면서 아래 팝업을 알리고, 확인버튼을 누르면 사라집니다.

 

 



 

postmortem 으로 Windbg가 등록되었다는 내용이에요..

 

이러고 나선 테스트할 프로그램을 실행해서 carsh가 발생되면!! Windbg가 실행됩니다.

 

나중에,,, 이제 필요없는데도, 계속해서 자동 windbg가 실행된다면...

아래 레지스트리를 삭제해주세요.

 

즉, postmortem으로 등록된 windbg 해제방법..

 

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

 

windbg가 준비가 끝나고 커서(prompt)가 활성화되면

 

>> !analyze -v

 

위처럼 입력해주시면 됩니다.

 

감사합니다.

 

반응형
Posted by Rainfly
l