brunch

You can make anything
by writing

C.S.Lewis

by 서오석 Jul 13. 2015

lipo, otool, atos = atosl

ios symbolication에서 필요한 것들.

IOS Symbolication을 하기 위해선 lipo, otool, atos 요 3개가 꼭 필요하다.

lipo는 symbol에서 지원하는 cpu architecture를 가지고 오는데 쓰이고, 

otool은 symbol의 uuid를 꺼내오는데 쓰이고, 

atos는 실제 load address를 가지고 코드라인을 찾는다.


mac에선 XCode를 깔면 기본적으로 저 명령어들을 다 쓸 수 있기 때문에 자신의 앱을 symbolication 하려면 mac의 symbolicatecrash만 가지고도 충분하다.


근데 crash report를 서비스하려면 mac은 너무 고가 장비다...

(IDC에서도 따로 관리되어야 하는.. 뭐 그런 존재.. mac workstation은 가격이 후덜덜 하니..) 

그래서 리눅스에서 symbolication을 해야 하는게 좋고.. 싼 머신을 여러개 두는게 더 나은 편인데.. 일단 리눅스에선 lipo도 otool도 없다. 물론 atosl은 있으니까 코드라인 찾는 건 된다.

(atosl을 이용한 심볼리케이션 참조)


그럼 나머지 lipo에서 하는 것과 otool에서 하는 걸 좀 살펴보자.

lipo -info : symbol이 지원하는 architecure 확인
otool : symbol이 가진 architecure의 uuid를 확인 (dwarfdump -u로 해도 됨) 

저 두개의 명령어로 하는 일은 crash가 났을 때 어떤 symbol이 진짜 소스코드가 들어있는 녀석인지 찾기 위함이다. 


처음에는 저 두개가 없어서 이래저래 매칭되는 dSYM을 찾는게 힘들었다. 근데 atosl source code를 보다 보니.. (C로 되어 있어서 올만에 머리가 아팠네..;;) dwarf를 이용해서 dsym의 정보를 읽어오는 부분이 있는 것을 확인해서 요기를 고치기 시작했고.. 테스트 해보니 잘 동작한다.


만든 버전은 https://github.com/5dolstory/atosl 요기에 있고 명령어는 다음과 같다.


UUID 정보 확인하기

atosl -u -A armv7s -o /8.4 (12H143)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation

-> b0f9be4f9a9b385eae69b5253766c059

Symbol 지원 Architecure 확인하기 

atosl -a  -o /8.4 (12H143)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation

-> armv7s

정리하면

otool = atosl -u -A -o
lipo = atosl -a -o 
atos = atosl -A -o -l

이렇게 된다.


이제 여기까지 했으니 match 로직을 개선해서 system usr library까지 모두 심볼리케이션 해보자.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari