아이폰 개발을 하다보면, 디버깅 상태에서도 그냥 띡하니 EXC_BAD_ACCESS 한 마디만 툭 내뱉고 어플리케이션이 종료되어 버리거나 하는 경우를 종종 볼 수 있다.

윈도우에서 어플리케이션을 개발해왔던터라 윈도우에서 개발할때는 보통 개발툴이 이미 해제된 메모리 주소를 가진 포인터에 접근하거나 기타 오류 상황에서 상당부분 오류가 난 소스의 위치를 찝어주는데, Xcode에서는 떡하니 뭔가 나 죽어요...라고만하고 핑 종료되어버려서 당황스러웠다.
디버거 콘솔에 딱히 뭔가 참고할만한 정보도 별로 없이 죽는경우도 많다.

이런 경우 디버거 콘솔에 조금 더 자세한 정보를 출력하도록 할 수 있는데, 아래처럼 설정해주면 된다.

Group & Files 의 Excutables에서 선택을 해주고, 메인툴바에 Info 버튼을 클릭한다.


Arguments 페이지에 "Variables to be set in the environment" 부분에 아래 이미지처럼 NSZombieEnabled와  NSDebugEnabled를 추가하고 모두 값을  YES로 적어준다. 이렇게 해놓고 어플리케이션을 실행하면, 디버거 콘솔에 좀 더 자세한 정보가 출력된다.

아래는 NSZombieEnabled, NSDebugEnabled 가 없을 때 오류가 난 상황에서 디버거 콘솔 화면이다.

아래는 NSZombieEnabled, NSDebugEnabled를 추가한 후 위와 동일한 오류가 발생한 상황에서의 디버거 콘솔 화면이다.
오류는 NSData 객체가 메모리 해제된 후 다시 release가 되어서 발생한 오류이다. [NSConcreteData release]: message sent to deallocated instance 라고 NSData와 관련된 부분에서 release 메시지가 잘못 보내져서 오류가 나고 있음을 확인할 수 있다.


Posted by xiles

댓글을 달아 주세요

  1. 최완복 2010/06/26 00:50  댓글주소  수정/삭제  댓글쓰기

    와 이거 되게 유용하겠네요.
    감사합니다 ㅎㅎ

맥OS 스노우 레오파드 사용 중 가끔 어느 순간부터 갑자기 F12 대쉬보드, F11 바탕화면 등의 기능키가 동작을 안하는 경우가 있다. 어떤 원인으로 발생하는지 모르겠지만 아무 생각없이 사용하다 보면 갑자기 안되는 순간이 생긴다.

여태까진 재부팅을 해줘서 해결했었는데, 재부팅 안하고도 일단 고칠 수 있는 방법을 찾았다.
원인은 모르기때문에 근본적으로 고치진 못하지만;;;

터미널(Terminal)을 띄우고 "killall Dock"을 실행시키거나 Activity Monitor를 실행시켜서 Dock 프로세스를 종료한다.
이 명령을 실행하면 바탕화면에 있던 Dock이 종료되어 사라져버리는데, 이 때 다시 F12, F11 키 등을 누르면 Dock도 다시 살아나고 F 키들도 다시 멀쩡하게 돌아간다.

음..원인은 무엇일까?...
Posted by xiles

댓글을 달아 주세요

  1. 안녕하세요 2010/07/01 23:28  댓글주소  수정/삭제  댓글쓰기

    아 전 아이맥 해킨 다들고 있는데 해킨에서만 이문제가 일어나는줄 알았는데 스노레오파드 버그군요...

    아이맥은 걍 레퍼드상태라 ... 흠...

    근데 또 잘 생각해보니 걍레오파드때도 이런 버그 가끔있었던거같던데.... 아이맥에서 그런거 같다능....


    죄송 너무 많다보니... 좋은거 알아갑니다 Killall dock 이군요 아 혹시 괜찮으시다면 맥 터미널에서 윈도처럼 아이피랑 네트웍정보와 핑테스트를 하는 명령어아시면 좀 가르켜 주세요.... 아님 터미널 명령어 사이트도 좋습니다....