iOS 심볼리케이션을 하려면 기본적으로 mac에서 debug모드로 하면 자동으로 된다.


개인 개발자면 별 문제가 없지만 nhn이나 skp, daumkakao 같이 다수의 앱을 서비스하는 회사에서는 iOS 앱의 크래쉬 정보를 서비스화 해서 전사 앱 개발을 하는데 도움을 주려고 시스템을 별도 구축한다.


몇가지를 보면 nhn의 ncrazer가 있고 skp는 crash logger라는 애고 daumkakao에는 moca crash report라는 시스템이 있다.


nhn ncrazer 


skp crash logger 
http://readme.skplanet.com/?p=5030 

daumkakao
음.. 따로 자료 안만듬..ㅎㅎ 나중에 만들어야 하는데..;

일단 요기까지 잡다한 설명은 제외하고 저런 서비스에서 iOS 심볼리케이션을 어떻게 할까?

대략 방법은 2가지다.
* xcode에서 기본적으로 제곡하는 symbolicatecrash를 이용하는 방법
* atos, otool, lipo, dwarfdump를 이용하는 방법


저건 모두 mac에서 돌려야 돌아간다. 


symbolicatecrash를 이리저리 뜯어서 속도를 빠르게 할 수 있다. 


근데 두번째은 다이렉트로 해보는 방법도 있어서 그 부분을 소개해보련다.


그냥 간단히 예제를 하나 보자


앱의 bundle name은 TestApps다. 


ios backtrace가 다음과 같다고 했을 때 


0   libsystem_kernel.dylib         0x34d721d4 0x34d5d000 + 86484

1   libsystem_c.dylib             0x34cdbcf8 0x34cc7000 + 85240

2   libsystem_c.dylib             0x34cf7798 0x34cc7000 + 198552

3   libsystem_c.dylib             0x34d1190c 0x34cc7000 + 305420

4   TestApps                       0x0034665e 0x6a000 + 2999902

5   TestApps                       0x0026d99c 0x6a000 + 2111900



dwarfdump로 심볼리케이션 한 주소를 알아내기 위해서는 symbol address를 알아내야 한다. 


symbol address를 알려면 일단 otool을 가지고 vmaddr의 메모리 주소를 알아내야 한다.


방법은 


otool -arch armv7 -l ../TestApps.xcahive/Products/Applications/DaumApps.app/DaumApps


이런식으로 arch 명령어 주고 앱파일의 위치를 걸면 


oad command 0

      cmd LC_SEGMENT

  cmdsize 56

  segname __PAGEZERO

   vmaddr 0x00000000

   vmsize 0x00004000

  fileoff 0

 filesize 0

  maxprot 0x00000000

 initprot 0x00000000

   nsects 0

    flags 0x0

Load command 1

      cmd LC_SEGMENT

  cmdsize 736

  segname __TEXT

   vmaddr 0x00004000

   vmsize 0x004d4000

  fileoff 0

 filesize 5062656

  maxprot 0x00000005

 initprot 0x00000005

   nsects 10

    flags 0x0


이런형태로 줄줄 뭐가 나오는데 Load command 가 LC_SEGMENT이고 segname이 __TEXT인 vmaddr이 우리가 필요한 메모리 주소다.


otool이 없어도 된다. dwarfdump로도 구할 수 있다. 


방법은 dwarfdump -R /TestApps/dSYM/ 을 하게 되면 


Segments

Segment Name     vmaddr   vmsize   fileoff  filesize maxprot  initprot nsects   flags

---------------- -------- -------- -------- -------- -------- -------- -------- --------

__PAGEZERO       00000000 00004000 00000000 00000000 00000000 00000000 00000000 00000000

__TEXT           00004000 004d4000 00000000 00000000 00000005 00000005 0000000a 00000000

__DATA           004d8000 000d0000 00000000 00000000 00000003 00000003 00000014 00000000

__LINKEDIT       005a8000 00430000 00001000 00178270 00000001 00000001 00000000 00000000

__DWARF          009d8000 012e7000 0017a000 012e637b 00000007 00000003 0000000f 00000000


이렇게 나오는데 빨간색으로 표기한게 vmaddr이다.


위에서 vmaddr은 0x00004000 이다


저 주소를 있으면 주소를 계산하자.


위에 backtrace의 4번 라인을 가지고 symbol address를 구해보자.


0x3B465E =   0x00004000 + 0x0034665e - 0x6a000


symbol address는 0x3B465E다.


이제 이걸 dwarfdump에 넣어서 돌리자.


dwarfdump --arch=armv7 --lookup=0x3B465E TestApps/dSYM/


결과를 보다보면

0x008cdb2e:     TAG_subprogram [78] *

                 AT_name( "-[AFHTTPClient initWithBaseURL:]" )

                 AT_decl_file( "/Users/5dolstory/Workspace/D TestAppsIphone/TestIphone/Pods/AFNetworking/AFNetworking/AFHTTPClient.m" )

                 AT_decl_line( 231 )


......

Line table dir : '/Users/5dolstory/Workspace/TestAppsIphone/TestIphone/Pods/AFNetworking/AFNetworking'

Line table file: 'AFHTTPClient.m' line 288, column 0 with start address 0x00000000003b4656

.........


이렇게 Line table 이 있는데 이게 crash가 난 위치고 AT decl file이 클래스 파일 위치고 AT name이 메소드명이다.





'개발 이야기' 카테고리의 다른 글

symbolication을 ubuntu에서 하기  (0) 2015.06.17
Posted by 서오석
,

오늘은 이지스 군함을 조립해 봅시다.


한번에 4개를 사서 조립하려니 진짜 빡시네요..;; 그래도 아들이 나중에 가지고 놀 걸 생각하면서 열심히 만듭니다.ㅎ


코어몰에서 제목을 이지스 군함이라고 만들었지만 케이스에는 Warship이라도 되어 있습니다.


생긴것도 이지스함이라기 보단 일반적인 구축함처럼 생겼습니다. 


브릭은 950 피스 정도 되며 대형 레고 블럭이며 가격은 코어몰에서 29500원 선에 팔리고 있습니다.




상자를 열어서 브릭을 까보면 양이 엄청나다는 것을 알 수 있습니다. 이렇게 양이 많은 브릭을 조립 할 때는 가능하면 브릭을 종류 별로 분리해 놓는 것이 좋습니다. 위에는 브릭을 종류 별로 분리하려고 그릇을 가져다 둔 겁니다.




양이 많아서 그런지 브릭을 정리하는데도 시간이 꽤 걸리네요..ㅎ 


회색 브릭과 매우 작은 브릭, 특수 브릭, 검은 색 브릭을 구분했습니다.




이제 구축함의 선두부터 만들어 봅시다. 처음 이야기 했지만 배가 상당히 큰 편입니다. 선두도 꽤나 크네요.



선두 조립을 끝냈습니다. 저기 뚜껑이 있는 부분이 원래 구축함들에겐 함대공 미사일이나 함대함 미사일이 발사되는 발사관입니다만...



요기에서는 한쪽은 보관함이고 한쪽은 사람이 탈 수 있는 공간으로 세팅되었습니다. 

(나중에 구조를 바꿔서 안에 미사일이 발사될 수 있도록 가능하게 해봐야겠습니다. 일단 선체가 매우 크기 때문에 가능할 듯 싶네요.)


저 상태가 선두 조립이 완료된 상태입니다.



선체의 후미를 만들기 시작합니다. 후미에는 핼리패드가 장착되어있습니다. 후미의 구조는 복잡하지 않아서 시간이 얼마 안걸렸네요.



배의 중간인 마스크 부분을 만들었습니다. 사진이 몇장 없지만 마스크 부분에 작은 부품이 많이 들어가서 시간이 꽤 걸렸습니다.




지금까지 만든 선두, 선미 , 마스크의 모습입니다. 뒤에 박스는 처음 만들었던 전투함세트네요..ㅎ



마스크 부분을 좀 더 보여드리자면 아래 미사일 발사대가 3문씩 양쪽에 있습니다. 이건 느낌상 러시아의 드레드노트같은 느낌이네요. 그리고 후방에 레이더 뒤쪽에도 양쪽을 기준으로 미사일 발사대가 있습니다. 이 부분을 골키퍼로 만들었으면 더 사실적이었을 것 같네요.



마스크를 조립하다가 1x1 부품 2개가 모잘라서 일단  비워놨습니다. 크게 눈에 띄지는 않네요.




선두에 장착되는 함포입니다. 요 배에는 함포에 사람이 타고 있을 수 있습니다. 아쉽게도 4x1 브릭 2개가 모자라서 좀 어설픕니다.

이 브릭도 판매자에게 같이 보내달라고 해야겠네요.




선두, 선미, 마스크를 합친 완성본 모습니다. 참고로 저기 구명보트의 체인은 정말 플라스틱 체인으로 되어 있습니다. 매우 약하니 조심 조심 다뤄서 끼워야 합니다.



좀 더 옆면을 보여드리고 싶어서 찍었습니다. 크기를 보시면 대략 70cm 정도 됩니다. 매우 큰편입니다.




앞에 사진을 한방 더 찍어봤습니다.


보시면 요 레고는 사람이 노란색입니다. 초대형 항모에도 사람이 노란색인걸 보니 중급에는 사람이 살색이 들어가고 대형에만 노란색 사람이 들어가는 듯 싶습니다.




말씀드린 체인 부분입니다. 디테일이 꽤 좋은 편입니다. 




정면을 보여드리기 위해서 찍은 사진입니다.


조립시간은 4시간 정도 소요되었습니다. 전에 프리깃 함을 조립할 때는 614피스인데도 4시간 반이 걸렸는데 얘는 970피스인데도 그때보다 시간이 적게 걸렸습니다.


이게 처음에 브릭을 분류해서 각 상자에 넣고 작업을 하면 작업시간을 상당히 단축 시킬 수 있습니다. 또한 브릭을 잃어버리지 않기 때문에 처음부터 없는 브릭이 뭔지 알 수 있습니다. 


생각보다 매우 디테일하기 때문에 10살정도 되는 아이가 조립을 하면 적당해 보였습니다. 


이제 마지막으로 초대형 항모가 남았네요.. 초대형 항모는.. 피스만 1500개 정도 됩니다.. 해서 블로그에 포스팅을 1,2부로 나눠서 하도록 하겠습니다.



Posted by 서오석
,

오늘 소개 할 호환레고는 "ENLIGHTEN 826 Aircraft Carrier (항공모함 전투단)" 입니다.



크기는 대형항모라고 보긴 좀 그렇고 경항모라고 하면 어울리겠네요. 피스는 508피스로 구성되어 있습니다.


가격은 25800원으로 역시 매우 저렴한 편입니다..ㅎㅎ


그럼 바로 조립을 해봅시다.





일단 브릭을 구분합니다. 저번 프리깃 함을 만들 때 브릭들을 마구 섞어서 작업을 하니 시간이 꽤 걸리더라고요. 


그래서 이번에는 그룹을 작은거 큰거로 구분했습니다.



항모의 뼈대를 만들기 시작합니다. 경항모의 뒤에는 보트가 들어갈 수 있게 되어 있습니다. 그래서 저 가드가 있고요.



어느정도 항모의 윤곽이 나오고 있습니다. 가운데 스프링 부분은 경항모에서 미사일 발사대가 측면으로 나오게 되어 있어서 그 부분을 만든 것입니다. 

 호환레고를 보면 신기한 부품들이 몇개가 있습니다. 일반적으로 레고에서 볼 수 없는 것들인데 아마 구동되는 부분을 만들려고 추가한 듯 합니다.



항모가 얼추 만들어졌습니다. 덥개를 덥으니 이제 좀 그럴싸하네요.



관제탑을 만들고 비행기만 올리면 끝납니다. 완성이 되었네요..ㅎㅎ



항모에 있는 조그만 보트입니다. 원래 항모 뒤에서 꺼낼 수 있는데  제품 설명에 보면 잘 나와 있어서 따로 안찍었습니다. 


이번 인현도 얼굴과 몸이 살색입니다.ㅎㅎ 



브릭을 조립하면서 모자란 브릭이 생겨서 임시로 다른 브릭으로 땜빵을 했습니다.


원래 4X1 브릭이 있어야 하는데 저기에다가 신호기 같은걸 만들어서 달려고 6X1 브릭으로 끼워넣었습니다. 없는 브릭은 역시 다시 요청을 해야겠네요.


대략적으로 만든 시간은 2시간 30분 정도 걸린 듯 합니다. 


일단 브릭 피스 자체가 509개정도로 전에 프리깃함보단 좀 더 적어서 맞추기가 수월합니다.


그리고 브릭을 구분해서 조립하니 브릭 찾는데 시간이 많이 단축되었네요.


대략적으로 8세 아이정도면 무난히 만들 수 있지 않을까 생각이 되네요.ㅎㅎ


중국 레고가 정말 가격대 성능비는 짱인듯 싶습니다.


Posted by 서오석
,

오랜만에 다시 블로그 포스팅을 하네요..


최근에 아이가 커서 레고를 사줄까 하다가 호환 레고를 알게 되어서 몇개 구매했습니다.(라고 쓰고 제가 갖고 싶어서라고 쓰지는 않습니다.;) 


일반 정품 레고와 비교했을 때 가격이.. 후덜덜하게 쌉니다. 그래서 하나씩 구입 할 때마다 블로그에 포스팅하기로 마음을 먹었습니다.


첫 호환 레고 스리즈는 "ENLIGHTNE 820 Frigate 구축함 세트입니다.


가격은 24800원 (2015.01.10) 정도로 매우 저렴합니다.


저는 그냥 11번가에서 구매했는데요. 오픈마켓에서 "코어몰"이라고 치면 많이 나옵니다. 거기서 구매하시면 됩니다.


생긴건 이렇게 생겼습니다.





안에 들어있는 브릭의 피스는 650개 정도 들어있고 구성은 큰배, 구명보트, 조그만 악당 섬 이렇게 3개입니다.


한국 명칭이 구축함 세트인데 영어로는 정확하게 명칭이 되어 있습니다. 크기로 봤을 때 프리깃함이라고 보는게 맞을 듯 합니다.


ENLIGHTEN 스리즈 중에 warship이라고 명명된 스리즈가 있는데 그게 구축함에 더 가까워 보입니다.

(한국명으로 이지스함이라고 되어 있는데.. 이지스도 구축함이니.. 얼추 맞긴 합니다.)


본격적으로 조립을 시작해보겠습니다.



상자를 열면 2개 상자로 분리되어 있습니다. 

(화면이 어두운 건 아내와 아기가 잘 때 혼자 만들어야 해서 불을 키지 못했습니다.ㅠ)


옆에 열쇠고리는.. 찬조입니다.(열쇠고리는 옥스포드꺼랑 비슷합니다.)



브릭의 구성은 이렇습니다. 대략 4봉지가 있고 봉지 안에 몇개 자잘한 것들이 있습니다.





브릭을 모두 상자에 쏟아 넣습니다. 작은 피스가 꽤 있기 때문에 잃어버릴 염려가 있어서 가능하면 상자에 담아놓고 작업을 하는게 좋습니다.



악당들이 지내는 조그만 섬입니다. 저기 로켓 발사대는 실제로 스프링으로 동작해서 발사가 됩니다! 0_0



이렇게 스프링으로 발사가 됩니다. 




섬을 다 만들고 브릭 인형을 배치했습니다. 재미있는게.. 원래 레고는 애들이 노락색 피부를 갖는데 얘네들은 피부가 살색입니다!

정말 사람이라서 그런건지 모르겠지만.. 살색입니다.






이제 로켓포드가 달린 헬기를 조립합니다.



헬기 완성을 하였습니다. 브릭들 사이에 쌓여 있어서 구분이 잘 되지 않네요. 




헬기 안에 조종사를 태웠습니다. 조종사 헬멧에 있는 안경은 너무 헐거워서 그냥 걸쳐놓는 수준입니다. 나중에 호환레고(중국)와 정품 레고간에 비교를 해야겠습니다. 전반적으로 중국산 레고는 브릭을 맞출 때 뻑뻑하거나 너무 헐겁습니다. 정품레고처럼 균일하지 않아 보입니다.





이제 구축함을 만들기 시작합니다. 구축함은 하부를 만듭니다.

하부를 만들 때 브릭 피스 1개가 모자랐습니다. (저 길다란 막대기..) 코어몰에선 모자란 브릭은 이야기 하면 따로 준다고 합니다. 


일단 없는대로 3개만 껴서 시작했습니다.



얼추 골격이 만들어졌습니다.



짜잔.. 이제 완성이 되었습니다. 사진엔 없는데 파란 옷 입은 사람 두명 밑에는 구명보트가 들어갈 수 있도록 되어 있습니다. 



헬기도 올려보았습니다. 


한국어로는 구축함 세트인데.. 구축함은 아니고 정말 프리깃함 정도입니다.


인형이 쓰고 있는 파란 모자에는 별이 그려져있습니다.(인민군이라 그런가 봅니다..)


6세 이상이 조립하긴 어려워 보이고 6세 이상이면 가지고 놀 정도 되어보입니다.


한..10살이나 11살 정도가 조립하면 좋을 듯 합니다. 


제가 조립한 시간은 4시간 정도 소요되었습니다.



Posted by 서오석
,