릴리즈한 exe와 동일한 exe, pdb, map 은 어느 방법을 쓰던지 필수적으로 가지고 있어야 한다!
1. 가장 간단하고 좋은 방법 - .dmp 파일이 있는경우
.dmp 파일을 VS2005 이상 컴파일러로 실행하여 F5를 눌러보는 것이당.
바로바로 어디서 뻑났는지 볼 수 있다.
(뻑난 버젼의 exe, pdb, map 를 같은 폴더에 넣어줘야되고, 빌드되었을때의 소스가 있는 위치를 지정해주면 OK)
2. .dmp 파일이 없고 뻑난 메모리주소만 알고 있는 경우
이 메모리 주소가 소스에서 어디인지 어떻게 찾는가는 아래처럼 하면 된다.
.map 파일을 텍스트 에디터로 열어보면
Address Publics by Value Rva+Base Lib:Object
0001:00000038 ??0CSPC@@QAE@XZ 00401038 f GESPC.obj
0001:00000065 ?GetBarrackState@CSPC@@UBEHXZ 00401065 f i GESPC.obj
0001:0000007c ?GetNextBarrackState@CSPC@@UBEHXZ 0040107c f i GESPC.obj
0001:00000083 ?GetPrevBarrackState@CSPC@@UBEHXZ 00401083 f i GESPC.obj
이런식으로.. 라이브러리의 함수들과 매칭되는 주소들이 쫘르륵 나와있다.
주의할것은,
버그트랩의 경우 뻑났다고 날아온 주소는 map 파일에서 가장 왼쪽의 Address라고 되어있는 항목이 아니라
Rva+Base 항목을 의미하는 것이란 사실.
예를들어,
버그트랩에서 뻑났다고 날아온 주소가 005B6EC4 인 경우!
0001:001b5dad ?OnEventSwordTrail@CActor@... 005b6dad f geScene:Actor.obj
0001:001b5f38 ?BeginTrail@CActor@geScene@... 005b6f38 f geScene:Actor.obj
뻑났다고 나온 부분이 CActor::OnEventSwordTrail 함수 이후의 부분이고
CActor::BeginTrail() 함수가 나오기 이전의 부분이므로,
CActor::OnEventSwordTrail() 함수 내부에서 문제가 일어났다는 것을 알아낼 수 있다.
만약 .dmp 파일을 열어본 것 처럼 정확하게 소스 몇번째 라인에서 뻑이 났다는것까지 알아보려면
동일한 버젼의 source를 비주얼 스튜디오에서 F10로 실행시킨 후
(이때 주의할점 - F10를 눌렀을때
다시 빌드하시겠습니까 어쩌고가 나오는데 빌드해버리면 안된다..
만들어졌을때의 exe/pdb/map 을 통해 봐야 하는데, 빌드를 해버리면
전혀 새로운 exe/pdb/map 이 나오면서 메모리 주소가 달라져 버린다)
두가지 방법이 있는데,
1. Ctrl+F11을 눌러서 어셈모드로 전환 후,
Ctrl+G를 눌러서 GoTo 창을 뜨게 한 후, 뻑난다는 메모리 주소로 이동하면 끝.
(어셈모드로 전환하면 디폴트가 Line 이 아닌 Address 로 선택되어 있음)
2. Alt+F9 를 눌러서 브레이크포인트 설정란을 뜨게 하여 메모리 주소를 추가한 후(메모리 주소로 브레이크포인트 추가)
F5를 눌러서 실행시킨다. 다만 이 방법은 코드가 실행되어야 하므로, 해당 부분이 실행될 때에 이르러서야
어느 부분인지 파악이 가능하겠고, 브레이크 포인트는 반드시 F10 으로 실행시킨 후 매번 설정해줘야 한다는 거.
F10으로 실행하기 전에 설정하면 먹히지 않고, 재실행시에도 리셋된다
pdb/map 파일이 exe파일과 같이 릴리즈되지 않았다면 스택덤프를 남길 시,
함수 이름까지 친절하게 남겨지지 않는데, 이런식으로 뻑난 부분을 찾아가면 된다.
참고로 프로그램 자체에 버그트랩 등 미니덤프파일 남기는 라이브러리 or 로직을 넣지 않았지만
.dmp 파일을 생성하게 하려면 이렇게 dr.watson 을 이용하는 방법이 있다
'프로그래밍 > 기타정보' 카테고리의 다른 글
정적 분석 도구 - Cppcheck (0) | 2011.07.04 |
---|---|
버그트랩 스크랩(http://loveru0.egloos.com/1351931) (0) | 2011.05.20 |
쉐이더 참고자료 (0) | 2010.09.28 |
쉐이더 EffectTechnique (0) | 2010.09.27 |
분석 익스포터 (0) | 2010.09.17 |