Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ライブラリーだってクラッシュレポートが見たい
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Victor Lee
May 14, 2019
Programming
0
560
ライブラリーだってクラッシュレポートが見たい
Victor Lee
May 14, 2019
Tweet
Share
More Decks by Victor Lee
See All by Victor Lee
Create Flutter Plugins
konyavic
2
2.5k
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
konyavic
2
1.2k
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
560
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
290
SDK開発にUIテストを導入してみた
konyavic
1
2.3k
Other Decks in Programming
See All in Programming
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
150
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
150
ぼくの開発環境2026
yuzneri
0
250
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
2026年 エンジニアリング自己学習法
yumechi
0
140
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
660
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
110
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
230
Featured
See All Featured
How to make the Groovebox
asonas
2
1.9k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
We Have a Design System, Now What?
morganepeng
54
8k
Mind Mapping
helmedeiros
PRO
0
90
The Language of Interfaces
destraynor
162
26k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
30 Presentation Tips
portentint
PRO
1
230
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Bash Introduction
62gerente
615
210k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
ライブラリーだって クラッシュレポートが⾒たい 2019/05/13
• @konyavic • OS→Game→VC→Repro (2017/07~) • SDK: Java/Obj-C • Testing:
Kotlin/Swift • Backend: Go/Rails • 最近はannotation processingに ハマってる 李 承益(りちぇんい) ࣗݾհ
※2017年の情報
• アプリだといろんなサービスが使える • Crashlytics • Firebase Crash • Developer Console
• SmartBeat • ΫϥογϡϨϙʔτ࣭վળͷͨΊͷॏཁͳπʔϧ ライブラリーを作る側としても、 ⾃分が出したライブラリーがどんなクラッシュを起こしているか把握したい!
• SIGABRT, SIGSEGVを検知する • POSIX sigaction(2) • 4.0BSD signal(3) •
未処理の例外を検知する • Java • Thread.setDefaultUncaughtExceptionHandler • Objective-C • NSSetUncaughtExceptionHandler ΫϥογϡϨϙʔτΛ࣮ݱ͢ΔͨΊͷखஈ 何かしらの⽅法でクラッシュを検知し、 クラッシュレポートを⽣成してアップロードする
• アプリ本体のクラッシュと区別しないとまずい! • SDKはmain threadで動くことが少ないこともあるので、 ⼀つの解決策としては、thread name/queue labelで区別すること • 他のクラッシュ検知SDKと共存できるようにしないとまずい!
• Crashlytics • Firebase Crash Ϋϥογϡݕͷલఏ
• SDKのthread nameに`io.repro.`のprefixを必ずつける • UncaughtExceptionHandlerを実装する • Thread nameを⾒て、処理するかどうかを判別 • 最後に本来のhandlerを呼び出すようにリレーする
• これで問題なくCrashlytics/Firebase Crashと共存可能 AndroidͰͷ࣮ Android側はJavaの例外処理だけで⼗分なので、UncaughtExceptionHandlerで実装する
• AndroidのUncaughtExceptionHandlerと同じようにsignal handlerを リレーする必要があるけど、 • Crashlytics/Firebase Crashは共にリレーしてくれない • 初期化するときは⾃前のsignal handlerが⼀番最後にインストー
ルするようにしないといけない • Firebase Crashにリレーできても、なぜかSIGSEGVの場合だけ Firebase Crashのhandler内で更にクラッシュが発⽣する iOSͰͷ࣮ (1) iOS側はsigaction/signalの実装でうまくFirebase Crashと共存できなかった
• SDKのdispatch queue labelに`io.repro.`のprefixを必ずつける • NSUncaughtExceptionHandlerを実装する • queue labelを⾒て、処理するかどうかを判別 •
最後に本来のhandlerを呼び出すようにリレーする • これで問題なくCrashlytics/Firebase Crashと共存可能 • しかし、このhandlerに⼊ること⾃体は稀なので、 ほとんどクラッシュレポートが⾶ばない… iOSͰͷ࣮ (2) iOS側も結局NSUncaughtExceptionHandlerで実装した
• signal handlerでブレークポイントを貼っても⽌まってくれない • Simulatorだと、そもそもhandlerを置換できていないようにみえる • 勝⼿にアドレスが変わる… ͓·͚(1) Xcodeではsignalのデバッグができない
• 実機でしか確認できない、デバッグモードで確認できない • => ログファイルに書き出し、実験後に回収して確認する • ios-deployを割と使えた • $ ios-deploy
-W -Lrb xxx.app • $ ios-deploy -Ww -1 bundle.id -2 DIR • Crashlytics/Firebase Crashはすぐに反映してくれなかったりする • => 実験して、翌⽇まで反映待ち… ͓·͚(2) iOSでCrashlyticsとFirebase Crashと共存できているかの確認は⼤変だった
• Android • java.lang.OutOfMemoryError • android.os.DeadSystemException • FATAL EXCEPTION in
Unity App - no stack trace available • iOS • Failed to grow buffer • unrecognized selector sent to instance ͓·͚(3) 普通にクラッシュレポートを全部集計するとOOMばかりになる
• 今まで気づいていないし、お客さんからも報告されていないバグを結 構修正できた! • でももう2度と触りたくない! ݁ہΫϥογϡϨϙʔτػೳΛ࡞ͬͯΑ͔͔ͬͨʁ