Slide 1

Slide 1 text

#技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.2 
 株式会社ZOZOテクノロジーズ
 ZOZOTOWN部
 元 政燮 Copyright © ZOZO Technologies, Inc. 【解説】第5章 iOSアプリのクラッシュ レポート、もう少し詳しく!


Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC開発本部
 ZOZOTOWN部 元 政燮
 韓国ソウル出身。若いうちに海外で働いてみたいと思ったの がきっかけで、2012年から日本でiOSアプリ開発をやっていま す。ZOZOTOWN iOSチームには2019年7月にJoinしました。 EC業界歴3年半。
 日本大好き、神社好きマンです。 
 


Slide 3

Slide 3 text

© ZOZO Technologies, Inc. Crash Report
 3 ● 取得方法 ● 見方(各エリア別) ● よく見かけるExceptionについて ● Crashlog.pyについて

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. Crash Reportの取得方法
 4 ストアに配信済みアプリの場合

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. Crash Reportの取得方法
 5 手元のデバイスから取得する場合 ここ

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. Crash Reportの取得方法
 6 取得したCrash Reportの例


Slide 7

Slide 7 text

© ZOZO Technologies, Inc. Crash Reportの見方
 7 ● Incident Identifier ● Crash Reporter Key ● Hardware Model ● Process ● Version(App) ● Date/Time ● OS Version Header Area Info

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. Crash Reportの見方
 8 ● Exception Type ● Exception Codes ● Exception Subtype ● Termination Reason ● Triggered by Thread Exception Info Area SIGTRAPのsignal number = 5, 0x5

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. Crash Reportの見方
 9 ● Exception Type ● Exception Codes ● Exception Subtype ● Termination Reason ● Triggered by Thread Exception Info Area Firebase Crashlytics

Slide 10

Slide 10 text

© ZOZO Technologies, Inc. Crash Reportの見方
 10 ● Frame Number ● Binary name ● Memory Address ● Method name ● Assembly Offset Thread Backtrace Area

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. Crash Reportの見方
 11 ● Frame Number ● Binary name ● Memory Address ● Method name ● Assembly Offset Thread Backtrace Area Frame number Binary name Memory Address Method name Assembly Offset 3 CrashExample 0x00000001000cf954 closure #1 in SecondViewController.fetch() + 31060 例)

Slide 12

Slide 12 text

© ZOZO Technologies, Inc. ● PC(Program Counter) pc(arm64) / rip(x86-64) ● sp(スタックポインタ) Crash Reportの見方
 12 Thread State Area

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. Crash Reportの見方
 13 ● Binary Image Address ● Binary name ● Architecture ● UUID ● Path Binary Images Area

Slide 14

Slide 14 text

© ZOZO Technologies, Inc. 14 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL

Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 15 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● リリース済みメモリーにアクセス ● 存在しないObjectにアクセス 特徴 ● Exception Subtypeに KERN_INVALID_ADDRESSがくる 発生アドレスとPCを比較する  同じなら - 命令のfetchエラー(メソッド名)  異なる - 参照先エラー

Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 16 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● read-onlyメモリーに書き込み 特徴 ● Exception Subtypeに KERN_PROTECTION_FAILUREがくる 発生アドレスとPCを比較する  同じなら - 命令のfetchエラー(メソッド名)  異なる - 参照先エラー

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. 17 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● Objective-CのExceptionが発生したが Catchされなかった ● abort()がコールされた 特徴 ● 他のthreadを確認する必要がある ● Last Exception Backtraceが表示される 場合がある

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. 18 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● 非Optional Typeにnilが入っている ● forced unwrapping失敗 ● キャスト失敗 ● ライブラリのFatalエラー発生 特徴 ● まずはデバッガーに制御を渡すができな い場合はクラッシュ

Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 19 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● CPUが不正な命令(UD2)を実行 UD2:この命令自体に意味はない 特徴 ● 過程を調べる必要がある ● Frameの中を調査する

Slide 20

Slide 20 text

© ZOZO Technologies, Inc. 20 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP) EXC_BAD_INSTRUCTION(SIGILL) SIGKILL 発生原因 ● iOSから強制終了 ● Termination Reasonに詳細 Code 備考 0x8badf00d watchdog のタイムアウト (メインスレッドがブロックされてる場合など ) 0xbad22222 VoIP アプリが頻繁に再開 0xc00010ff 発熱により OS がアプリを強制終了 0xdead10cc アプリが suspend 状態 (バックグラウンド ) になり、ロックされたファイル、 SQLite の DB に対し操作をすると発生 0x2bad45ec 画面がロックされた状態で描画をするなど、セキュリティ違反

Slide 21

Slide 21 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 21 crashlog.pyを利用して クラッシュした場所を特定する

Slide 22

Slide 22 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 22 FirstViewController SecondViewController

Slide 23

Slide 23 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 23 FirstViewControllerのボタンが押されたときの処理 SecondViewControllerのfetch処理

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 24 Firebase Crashlytics

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 25 Crash Report

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. crashlog.pyを使う
 26 $ lldb (lldb) script import lldb.macosx.crashlog lldbを起動してcrashlogをimportする (lldb) crashlog <クラッシュレポートのファイルパス > クラッシュレポートをロードする

Slide 27

Slide 27 text

© ZOZO Technologies, Inc. crashlog.pyを使う 27

Slide 28

Slide 28 text

© ZOZO Technologies, Inc. 28 終わりに

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. 参考
 29 LLDB Crashlog https://lldb.llvm.org/use/symbolication.html?highlight=crashlog Understanding and Analyzing Application Crash Reports https://developer.apple.com/library/archive/technotes/tn2151/_index.html WWDC 2018 Understanding Crashes and Crash Logs https://developer.apple.com/videos/play/wwdc2018/414/

Slide 30

Slide 30 text

No content