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
10年もののバグを退治した話
Search
n-seki
December 23, 2024
Technology
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
10年もののバグを退治した話
n-seki
December 23, 2024
More Decks by n-seki
See All by n-seki
2App, 1Repository
n_seki
0
41
永続化、なに使おう?
n_seki
0
330
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
110
やってみようMaven!
n_seki
0
380
Try Android Health Connect
n_seki
0
99
Other Decks in Technology
See All in Technology
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
6
1.1k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
210
モダンフロントエンド 開発研修
recruitengineers
PRO
4
610
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
110
Bits Agent Builder の⼊⾨と活⽤事例
nulabinc
PRO
0
110
第3回しろおびセキュリティスポンサーセッション
log0417
0
170
サイバー捜査員研修(前半)
nomizone
1
2k
Model Studio CLI × Token Plan
maigo999
0
160
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
570
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
MIRU 2026 チュートリアル
keisuke198619
0
890
日本語を汚染するAI
route250
1
120
Featured
See All Featured
Design in an AI World
tapps
1
280
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
700
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
The Spectacular Lies of Maps
axbom
PRO
1
900
YesSQL, Process and Tooling at Scale
rocio
174
15k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
630
Site-Speed That Sticks
csswizardry
13
1.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Being A Developer After 40
akosma
91
590k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
370
Typedesign – Prime Four
hannesfritz
42
3.1k
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 完