반응형
글쓰다가 키보드 배치가 달라서 날려 먹고 다시 쓴다. (이래서 키보드는 맥용 키보드만 써야 하나 보다 ....

iOS 앱을 단말 즉 아이폰 또는 아이패드(이하 아이팟 터치)에 올리고 테스트 하거나 앱스토어 배포 하고 나면

크래쉬 로그를 입수 하게 될 것이다.

여기서 크래쉬 로그란.... (모르는 분을 위해서)
-> 앱이 죽을때 내가 무얼 하다 죽었다 라고 유언장 같은 걸 남긴다 이게 바로 크래쉬 로그 이다.

이 크래쉬 로그를 열어 보면 메모리 주소랑 이것저것 만 보여진다.

아무것도 알 수 없다. 이때 dSYM 파일이라 불리우는 심볼릭 관련 파일을 통해

앱의 유언장을 앱 개발자가 알아 볼 수 있게 된다.

여기서 잠깐 dSYM이 어디있나요?(라고 물어 보시는 분이 있을거 같아 남긴다.)
-> dSYM은 디바이스 빌드하여 나온 결과물 *.app 파일과 같은 폴더내에 존재 한다.
이 dSYM 파일은 빌드시마다 바뀌니 배포나 테스트 목적으로 .app 파일을 만들 경우
dSYM 파일도 같이 복사하여 사본을 만들어서 따로 저장해야 한다.

다음으로 할 것은 다음과 같다.

dSYM이 존재한다면 crash 로그를 xcode의 organizer 를 통해 확인을 할 수 있다.

통상 이렇게 보여진다.
출처 : http://stackoverflow.com/questions/6086201/need-help-about-ios-crash-log
Date/Time:       2011-05-22 11:28:40.514 +0700
OS
Version:      iPhone OS 4.3.3 (8J2)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xf039cde6
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x32da1c98 objc_msgSend + 16
1   iPORTALs                        0x000801a0 0x1000 + 520608
2   iPORTALs                        0x00080930 0x1000 + 522544
3   iPORTALs                        0x0006eb0a 0x1000 + 449290

자 여기서 APP은 iPORTALs 라는 앱이다.  0xOOOOOO~ 이렇게 보이는게 메모리 주소다
dSYM을 통해 심볼릭이 된다면 저 구간이 소스파일의 어디 함수 인지 보여준다.

그러나 안보일때가 있다 이때는 다음과 같은 방법을 써야 한다.

위와 같이 crash 로그 파일을 열어 두고

app파일이 있는 디렉토리 경로로 터미널을 이용해서 접근한다. (설마 리눅스 또는 유닉스를 안써본건 아니시죠? ^^:)

접근하고 다음과 같은 명령어를 입력 하면

크래쉬 로그의 모든 내용이 심볼릭 된 결과는 아니지만

최소한의 심볼릭 된 결과를 볼 수 있다.

명령어는 다음과 같다
atos -arch arm7 -o "App명.app/App명" 메모리주소(0xOOOOOOO?)

을 입력하면 해당 메모리의 소스 파일 및 메소드 명을 알아 낼 수 있다.

정확도는.... 내가 테스트 한거 기준으로는 꽤 높았다. (죽는 케이스도 몇 번 잡았다.)

끝~
반응형
Posted by onlyTheOne
,