Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10年もののバグを退治した話
Search
n-seki
December 23, 2024
Technology
0
230
10年もののバグを退治した話
n-seki
December 23, 2024
Tweet
Share
More Decks by n-seki
See All by n-seki
永続化、なに使おう?
n_seki
0
300
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
100
やってみようMaven!
n_seki
0
360
Try Android Health Connect
n_seki
0
93
Other Decks in Technology
See All in Technology
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
1
170
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
260
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
190
生成AI時代におけるグローバル戦略思考
taka_aki
0
120
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
270
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
780
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
670
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
1
710
AI時代の開発フローとともに気を付けたいこと
kkamegawa
0
2.9k
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
240
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
170
乗りこなせAI駆動開発の波
eltociear
1
1.1k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Building Applications with DynamoDB
mza
96
6.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Visualization
eitanlees
150
16k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Code Reviewing Like a Champion
maltzj
527
40k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
A Modern Web Designer's Workflow
chriscoyier
698
190k
Being A Developer After 40
akosma
91
590k
Transcript
STORES 株式会社 Ebisu.mobile #8 大忘年会 2024年 12月 20日 ・ Naoto
Uwaseki 10年もののバグを退治した話
• 上関直人/うわせき なおと • STORES 決済/Androidエンジニア • アイコンはモルモット • 趣味
◦ エレキギター ᷚ🎸 自己紹介 2
STORES 決済 の紹介 3
STORES 決済 の技術の紹介 4 決済アプリ 決済端末 レシート プリンター サーバー •
Bluetooth接続 • コマンド生成をC言語でライブラリ化
10年もののバグ退治......その経緯 5 • 最初に問題を検知したのは2020年 ◦ Android10の端末でクラッシュが発生している ◦ ネイティブクラッシュということだけが分かった • Android側のバグだろうか?と思って様子を見ていた......
ネイティブクラッシュ C言語などのネイティブコードでのクラッシュこと。
10年もののバグ退治......その経緯 6 ところが、、、
10年もののバグ退治......その経緯 7 • 一向に解消しない 😨 • 断続的に調査を行うものの有益な情報は得られず • なにかしら発生条件があるらしい ◦
クラッシュ率自体は高くなかった
10年もののバグ退治......その経緯 8 2024年 真剣に向き合おうと決意 🔥
10年もののバグ退治......クラッシュレポートから分かること 9 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 10 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 11 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......クラッシュレポートから分かること 12 • ネイティブクラッシュをFirebase Crashlyticsに送る
10年もののバグ退治......傾向・条件をつかむ! 13 • スタックトレースからは何も情報が得られなかった • FirebaseにはユーザーIDを送っている 💡 ◦ 他のログと突き合わせることで情報が増える ◦
クラッシュの傾向・条件がつかめないだろうか......?
10年もののバグ退治......傾向・条件をつかむ! 14 • クラッシュしたユーザーはプリンターを利用している! ◦ プリンターのモデルはバラバラ • 印刷処理に何かしら問題がある......?
STORES 決済 の技術の紹介 15 決済アプリ 決済端末 レシート プリンター サーバー •
Bluetooth接続 • コマンド生成をC言語でライブラリ化
10年もののバグ退治......泥臭いデバッグ 16 • プリンターへ送るコマンドの生成処理を C言語 で実装、 ライブラリ化して利用している ◦ とても怪しい •
二分探索的にコードをコメントアウト -> 実行......という 泥臭い作業のすえクラッシュを引き起こす関数を特定 💪
10年もののバグ退治......原因特定! 17 • 社内ライブラリの印刷データの作成処理にバグがあった • 具体的にはmemset関数の使い方が誤っていた ◦ バッファーオーバーフローが発生 😱 バッファーオーバーフロー
プログラムがバッファに割り当てられた空間よりも大きなデータを書き込むことで、 データがバッファ境界からあふれ、バッファの範囲外のメモリを上書きし、元々その メモリにあったデータを破壊してしまうことを指す。 (Wikipedia・バッファオーバーフロー)
10年もののバグ退治......原因特定! 18 • 非常に単純化すると、以下のような実装があった memset(アドレス, 1バイトの値, 3) • アドレスが指す領域に、1バイトの値を、3バイト分書く •
なぜか「3」がハードコーディングさていた 🤔🤔🤔
10年もののバグ退治......原因特定! 19 • なぜか「3」がハードコーディングさていた 🤔🤔🤔 memset(アドレス, 1バイトの値, 3) • 1バイトの値を1バイト書き込むことを前提に領域確保
• 2バイト余分に書き込むのでバッファーオーバーフロー
10年もののバグ退治......対応をリリース 20 • 想定外の領域の値が書き換わってしまったことが原因 ◦ 書き換わった領域が参照されるとクラッシュ ▪ 発生率の低さ & 謎のスタックトレースの要因
• ライブラリ実装当初からこうなっていた ◦ 10年以上前! • 1行修正してリリースすると......
10年もののバグ退治......対応をリリース 21
10年もののバグ退治......対応をリリース 22 倒せた 🎉
10年もののバグ退治からの教訓 23 • スタックトレースが理解不能でも慌てない 👌 • 特殊なクラッシュでもツールを駆使して情報を増やす 💡 • 他の情報と組み合わせることで発生条件を絞り込める
💡 • 諦めない気持ち ✊
10年もののバグを退治した話 24 完