Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【解説】第5章 iOSアプリのクラッシュレポート、もう少し詳しく! / zozotechbook1-ch05-crashreport

22387942388a45f3f81ebc394700e296?s=47 gen
May 01, 2020

【解説】第5章 iOSアプリのクラッシュレポート、もう少し詳しく! / zozotechbook1-ch05-crashreport

Title

【解説】第5章 iOSアプリのクラッシュレポート、もう少し詳しく!

Speaker

元 政燮 Jeongsub Won(ZOZOTOWN部)

2020/04/30 【オンライン】#技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.2
https://zozotech-inc.connpass.com/event/173609/

#zozotech

22387942388a45f3f81ebc394700e296?s=128

gen

May 01, 2020
Tweet

More Decks by gen

Other Decks in Technology

Transcript

  1. #技術書典 頒布本「ZOZO TECH BOOK」解説会 Vol.2 
 株式会社ZOZOテクノロジーズ
 ZOZOTOWN部
 元 政燮

    Copyright © ZOZO Technologies, Inc. 【解説】第5章 iOSアプリのクラッシュ レポート、もう少し詳しく!

  2. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 EC開発本部
 ZOZOTOWN部 元 政燮
 韓国ソウル出身。若いうちに海外で働いてみたいと思ったの

    がきっかけで、2012年から日本でiOSアプリ開発をやっていま す。ZOZOTOWN iOSチームには2019年7月にJoinしました。 EC業界歴3年半。
 日本大好き、神社好きマンです。 
 

  3. © ZOZO Technologies, Inc. Crash Report
 3 • 取得方法 •

    見方(各エリア別) • よく見かけるExceptionについて • Crashlog.pyについて
  4. © ZOZO Technologies, Inc. Crash Reportの取得方法
 4 ストアに配信済みアプリの場合

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

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


  7. © ZOZO Technologies, Inc. Crash Reportの見方
 7 • Incident Identifier

    • Crash Reporter Key • Hardware Model • Process • Version(App) • Date/Time • OS Version Header Area Info
  8. © 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
  9. © ZOZO Technologies, Inc. Crash Reportの見方
 9 • Exception Type

    • Exception Codes • Exception Subtype • Termination Reason • Triggered by Thread Exception Info Area Firebase Crashlytics
  10. © ZOZO Technologies, Inc. Crash Reportの見方
 10 • Frame Number

    • Binary name • Memory Address • Method name • Assembly Offset Thread Backtrace Area
  11. © 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 例)
  12. © ZOZO Technologies, Inc. • PC(Program Counter) pc(arm64) / rip(x86-64)

    • sp(スタックポインタ) Crash Reportの見方
 12 Thread State Area
  13. © ZOZO Technologies, Inc. Crash Reportの見方
 13 • Binary Image

    Address • Binary name • Architecture • UUID • Path Binary Images Area
  14. © ZOZO Technologies, Inc. 14 よく見かけるException
 EXC_BAD_ACCESS(SIGSEGV) EXC_BAD_ACCESS(SIGBUS) EXC_CRASH(SIGABRT) EXC_BREAKPOINT(SIGTRAP)

    EXC_BAD_INSTRUCTION(SIGILL) SIGKILL
  15. © 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エラー(メソッド名)  異なる - 参照先エラー
  16. © 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エラー(メソッド名)  異なる - 参照先エラー
  17. © 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が表示される 場合がある
  18. © 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エラー発生 特徴 • まずはデバッガーに制御を渡すができな い場合はクラッシュ
  19. © 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の中を調査する
  20. © 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 画面がロックされた状態で描画をするなど、セキュリティ違反
  21. © ZOZO Technologies, Inc. crashlog.pyを使う
 21 crashlog.pyを利用して クラッシュした場所を特定する

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

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

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

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

  26. © ZOZO Technologies, Inc. crashlog.pyを使う
 26 $ lldb (lldb) script

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

  28. © ZOZO Technologies, Inc. 28 終わりに

  29. © 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/
  30. None