요약 : WinCE 어플리케이션에서 실행 중 특정 동작에서 aborting에러가 날 경우 해당 address를 가지고 map파일 내의 function을 찾아가서 정확한 에러 위치를 검출해 내는 방법
릴리즈 모드로 컴파일 하였거나 디버깅이 불가능 한 상황에서 Data Abort로 프로그램이 죽었을 경우 그 위치를 찾아 낼 수 있다.
Generate mapfile 체크한다.
Project Option : /MAPINFO:EXPORTS /MAPINFO:LINES 추가하고 /incremental:no 로 Setting
Project Setting -> C/C++ 에서 Debug Info : Line Number Only 로 설정
Data Abort 발생
Data Abort: Thread=87333b28 Proc=843bcf70 'DATA_ABORT.EXE'
AKY=00040001 PC=00011014 RA=00011034 BVA=26000000 FSR=00000007
Crash Address ? Preferred Load Address ? 0x1000
Crash Address (PC) : 0x00011014
Preferred Load Address : 0x00010000
Preferred Load Address 는 map file을 오픈하여 찾을 것!!!
공식으로 계산을 하면
0x00011014 - 0x00010000 - 0x1000 = 0x14 이 나오게 되고
이 0x14 값을 가지고
map 을 살펴 보면
Line numbers for .ARMV4IDbgDataAbort.obj(C:Documents and SettingsAdministrator바탕 화면DataAbortDataAbort.cpp) segment .text
7 0001:00000000 8 0001:00000004 9 0001:0000000c 10 0001:00000018
16 0001:00000020 18 0001:00000028 19 0001:0000002c 20 0001:00000038
9 0001:0000000c 10 0001:00000018 이 부분 사이에 값이 들어가게 된다.
그러므로 9, 10 라인에서 Crash가 발생된 걸 알 수 있다.