Data Abort 에러 발생시에 에러확인 및 중단하기

프로그래밍/개발/Blackjack(SPH-M6200) 2007.10.27 00:12

블랙잭을 이용하여 프로그램을 작성하던 도중 특정 구문을 수행할시에 Data Abort 에러가 발생하는 것을 확인하였다.

평소 Win32 용 프로그램만 작성해 보다가 처음 하고 있는 Windows Mobile 디바이스 작업이기 때문에 처음 보는 에러였는데, 구글을 통해 검색해 보니 대충 윈도의 잘못된 연산 수행이나, 리눅스의 Segmentation fault 와 비슷한 것이라는 얘기가 나왔다.

그런데 이상한 점이, 분명히 윈도용 프로그램을 개발할 때에는 잘못된 연산을 수행하면 즉시 그 부분에 브레이크가 걸리고 무엇이 잘못되었는지 표시가 되는데 여기서는 그렇지가 않다는 것이었다.

사용자 삽입 이미지

멈추지 않고 에러가 계속 발생한다.

나같은 초보 프로그래머들은 저 에러메시지만 보고서는 대체 무슨 에러인지도 모르겠고, 소스에도 의심가는 부분이 없게 된다면 무척이나 당황하게 된다.

결국 Trace 를 통해 문제가 되는 부분을 찾았는데, 전혀 이상이 없다.
해답을 찾아 삼만리..

결국 발견한 것은 다음과 같은 방법이다.

Debug>Exceptions 메뉴를 실행한다.
다음과 같은 창이 뜬다.

사용자 삽입 이미지

Win32 Exceptions

주의해서 봐야 할 부분은 여기 Win32 Exceptions 부분이다.

여기 체크된 예외만이 디버거 실행을 멈추게 되어있다. 기본값은 위와 같고 (물론 항목은 더 많다.) 잘 보면 기본적인 Access violation 이나 Illegal Instruction, Datatype misalignment 가 체크되어 있지 않은 것을 알 수 있다.

위 항목을 체크하고 OK를 눌러주자

사용자 삽입 이미지

멈추길 바라는 항목들을 체크

다시 프로그램을 실행하면 결과가 아까와는 조금 달라진다.

사용자 삽입 이미지

뭐가 달라졌을까?

과연 어떤점이 다를까.

아까는 볼 수 없었던 줄이 하나 추가 된것을 볼 수 있다.
First-chance exception at 0x00028048 in xxxxxxxx.exe: 0x80000002: Datatype misalignment.


그리고 훌륭하게 디버거는 문제가 발생한 지점에서 실행을 중단하고 메시지 창을 띄운다.

사용자 삽입 이미지

Datatype misalignment

Data Abort 를 일으킨 장본인은 바로 Datatype misalignment 에러였다.

자! 문제가 무엇인지 좀 더 분명해 졌다.
왜 이런 Exception 들을 기본으로 체크해 놓지 않았는지 의문이 생기지만, 어쨌든 해결하게 된 것 만으로도 기쁘게 생각한다.
이제 문제가 무엇인지 알았으니 이제 문제를 해결하기만 하면 된다! (아직 해결 안됐음)

참고: datatype alignment 참고자료



Trackback 0 : Comments 2
  1. dawnsea 2007.12.17 17:14 신고 Modify/Delete Reply

    리퍼러 보고 왔어요 ㅋㅋ

    CE .NET 에서도 역시 무조건 4의 배수 얼라인을 하라는 듯?
    일단 아키텍쳐들이.. 임베디드에서 쓰는 코어들은 하드웨어 얼라인을 지원 안 하거든요..


    어.. 근데 수원멤이네요 -_-;
    저 수원멤 13기 -_-;; 애매모호한 낙오자 있습니다 ㅋㅋ -_-;

    • mahalo 2007.12.31 01:35 신고 Modify/Delete

      핫.. 방문해주셔서 감사합니다 ^^;
      수원멤 13기시면 한참 선배님이시네요~
      저는 16기랍니다.. 13기는 거의 모르는데.. OB와의 만남 오셨으면 한번쯤 뵈었을지도 모르겠습니다 ^^

Write a comment