Data Abort 에러 발생시에 에러확인 및 중단하기
프로그래밍/개발/Blackjack(SPH-M6200) 2007/10/27 00:12블랙잭을 이용하여 프로그램을 작성하던 도중 특정 구문을 수행할시에 Data Abort 에러가 발생하는 것을 확인하였다.
평소 Win32 용 프로그램만 작성해 보다가 처음 하고 있는 Windows Mobile 디바이스 작업이기 때문에 처음 보는 에러였는데, 구글을 통해 검색해 보니 대충 윈도의 잘못된 연산 수행이나, 리눅스의 Segmentation fault 와 비슷한 것이라는 얘기가 나왔다.
그런데 이상한 점이, 분명히 윈도용 프로그램을 개발할 때에는 잘못된 연산을 수행하면 즉시 그 부분에 브레이크가 걸리고 무엇이 잘못되었는지 표시가 되는데 여기서는 그렇지가 않다는 것이었다.
멈추지 않고 에러가 계속 발생한다.
나같은 초보 프로그래머들은 저 에러메시지만 보고서는 대체 무슨 에러인지도 모르겠고, 소스에도 의심가는 부분이 없게 된다면 무척이나 당황하게 된다.
결국 Trace 를 통해 문제가 되는 부분을 찾았는데, 전혀 이상이 없다.
해답을 찾아 삼만리..
결국 발견한 것은 다음과 같은 방법이다.
Debug>Exceptions 메뉴를 실행한다.
다음과 같은 창이 뜬다.
Win32 Exceptions
여기 체크된 예외만이 디버거 실행을 멈추게 되어있다. 기본값은 위와 같고 (물론 항목은 더 많다.) 잘 보면 기본적인 Access violation 이나 Illegal Instruction, Datatype misalignment 가 체크되어 있지 않은 것을 알 수 있다.
위 항목을 체크하고 OK를 눌러주자
멈추길 바라는 항목들을 체크
다시 프로그램을 실행하면 결과가 아까와는 조금 달라진다.
뭐가 달라졌을까?
아까는 볼 수 없었던 줄이 하나 추가 된것을 볼 수 있다.
그리고 훌륭하게 디버거는 문제가 발생한 지점에서 실행을 중단하고 메시지 창을 띄운다.
Datatype misalignment
Data Abort 를 일으킨 장본인은 바로 Datatype misalignment 에러였다.
자! 문제가 무엇인지 좀 더 분명해 졌다.
왜 이런 Exception 들을 기본으로 체크해 놓지 않았는지 의문이 생기지만, 어쨌든 해결하게 된 것 만으로도 기쁘게 생각한다.
이제 문제가 무엇인지 알았으니 이제 문제를 해결하기만 하면 된다! (아직 해결 안됐음)
참고: datatype alignment 참고자료
