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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Victor Lee
May 14, 2019
Programming
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ライブラリーだってクラッシュレポートが見たい
Victor Lee
May 14, 2019
More Decks by Victor Lee
See All by Victor Lee
Create Flutter Plugins
konyavic
2
2.6k
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
konyavic
2
1.3k
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
570
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
300
SDK開発にUIテストを導入してみた
konyavic
1
2.4k
Other Decks in Programming
See All in Programming
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
240
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.1k
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
3.5k
5分で問診!Composer セキュリティ健康診断
codmoninc
0
630
AIが無かった頃の素敵な出会いの話
codmoninc
1
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
920
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
110
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
660
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
230
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
660
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Chasing Engaging Ingredients in Design
codingconduct
0
240
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
250
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Believing is Seeing
oripsolob
1
170
Writing Fast Ruby
sferik
630
63k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
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度と触りたくない! ݁ہΫϥογϡϨϙʔτػೳΛ࡞ͬͯΑ͔͔ͬͨʁ