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
Victor Lee
May 14, 2019
Programming
0
480
ライブラリーだってクラッシュレポートが見たい
Victor Lee
May 14, 2019
Tweet
Share
More Decks by Victor Lee
See All by Victor Lee
Create Flutter Plugins
konyavic
2
2.3k
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
konyavic
2
1.1k
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
500
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
250
SDK開発にUIテストを導入してみた
konyavic
1
1.9k
Other Decks in Programming
See All in Programming
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
550
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
330
長期運用プロダクトの開発速度を維持し続けるためのリファクタリング実践例
wataruss
8
2.7k
今インフラ技術をイチから学び直すなら
yuhta28
1
120
React + TextAliveでカッコいいLyric Applicatioinを作ろう!!
tosuri13
0
390
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
190
事業フェーズの変化に対応する 開発生産性向上のゼロイチ
masaygggg
0
170
Web技術を駆使してユーザーの画面を「録画」する
yukukotani
13
6.5k
Swift Concurrencyとレースコンディション
objectiveaudio
1
410
Some more adventure of Happy Eyeballs
coe401_
2
180
Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー
satoshi256kbyte
2
250
RAGの回答精度評価用のQAデータセットを生成AIに作らせた話
kurahara
0
240
Featured
See All Featured
Embracing the Ebb and Flow
colly
83
4.4k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
GitHub's CSS Performance
jonrohan
1029
450k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
GraphQLとの向き合い方2022年版
quramy
43
13k
Optimising Largest Contentful Paint
csswizardry
29
2.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
For a Future-Friendly Web
brad_frost
174
9.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
359
18k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
278
13k
Being A Developer After 40
akosma
83
590k
Fantastic passwords and where to find them - at NoRuKo
philnash
48
2.8k
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度と触りたくない! ݁ہΫϥογϡϨϙʔτػೳΛ࡞ͬͯΑ͔͔ͬͨʁ