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
540
ライブラリーだってクラッシュレポートが見たい
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
530
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
280
SDK開発にUIテストを導入してみた
konyavic
1
2.1k
Other Decks in Programming
See All in Programming
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
160
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
210
エラーって何種類あるの?
kajitack
5
140
Webからモバイルへ Vue.js × Capacitor 活用事例
naokihaba
0
540
ワンバイナリWebサービスのススメ
mackee
10
7.7k
イベントストーミングから始めるドメイン駆動設計
jgeem
4
820
Parallel::Pipesの紹介
skaji
2
910
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
110
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
920
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
150
カクヨムAndroidアプリのリブート
numeroanddev
0
410
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
350
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
24
1.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Docker and Python
trallard
44
3.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
The Language of Interfaces
destraynor
158
25k
Designing for humans not robots
tammielis
253
25k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Building Applications with DynamoDB
mza
95
6.4k
Designing Experiences People Love
moore
142
24k
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度と触りたくない! ݁ہΫϥογϡϨϙʔτػೳΛ࡞ͬͯΑ͔͔ͬͨʁ