Data Abort

임베디드 월드 > 윈도우즈 임베디드 > 윈도우즈 임베디드 CE 익셉션 에러 추적하기 (이걸로 충분ㅎ)

-----

Debug -> Exceptions( Ctrl+Alt+E ) -> Exceptions
Check Access violation, Illegal Instruction, Datatype misalignment

-----

Ctrl + Alt + U( 모듈(.exe) ) -> 기호 로드(.pdb)

-----

WinCE App에서 실행 중 특정 동작에서 aborting에러가 날 경우 해당 address를 가지고 map파일 내의 function을 찾아가서 정확한 에러 위치를 검출해 내는 방법.
Release 모드로 컴파일 하였거나 디버깅이 불가능 한 상황에서 Data Abort로 프로그램이 죽었을 경우 그 위치를 찾아낼 수 있다.

Alt + F7 -> 링커 -> 디버깅 -> 맵 파일 생성 : 예(/MAP) , 맵 내보내기 : /MAPINFO:EXPORTS
링커 -> 일반 -> 증분링크 사용 : 아니요(/INCREMENTAL:NO) (?) - 검증안됨
C/C++ -> 일반 -> 디버깅 정보 형식 : 프로그램 데이터베이스(/Zi) (?) - 검증안됨
으로 설정.

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

-----
cf. VS2005
7DE9 Data Abort: Thread=8543da90 Proc=804eb840 'testA.exe'
7DE9 AKY=04000001 PC=78271094(testB.dll+0x00001094) RA=00007957(???+0x00007957) BVA=36000000 FSR=00000007
7DE9 RaiseException: Thread=8543da90 Proc=804ea490 'gwes.exe'
7DE9 AKY=04000021 PC=03f683dc(coredll.dll+0x0001e3dc) RA=8003bdcc(NK.EXE+0x0003adcc) BVA=00000001 FSR=00000001
-----

Preferred Load Address : 0x00010000
( Preferred Load Address 는 map file을 오픈하여 찾을 것 )

공식으로 계산을 하면 0x00011014 - 0x00010000 - 0x1000 = 0x14 이 나오게 되고
이 0x14 값을 가지고 map 을 살펴 보면,

Line numbers for .ARMV4IDbgDataAbort.obj(C:\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가 발생된 걸 알 수 있다.

-----
cf. VS2005에서 /MAPINFO:LINES 를 더이상 지원 X.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 인도왕자 | 2008/09/09 00:56 | IT | 트랙백 | 덧글(0)

트랙백 주소 : http://indoprince.egloos.com/tb/2010631
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶