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
0
220
10年もののバグを退治した話
n-seki
December 23, 2024
Tweet
Share
More Decks by n-seki
See All by n-seki
永続化、なに使おう?
n_seki
0
290
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
100
やってみようMaven!
n_seki
0
340
Try Android Health Connect
n_seki
0
91
Other Decks in Technology
See All in Technology
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
390
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
210
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
280
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
Apache Spark もくもく会
taka_aki
0
140
2025/09/16 仕様駆動開発とAI-DLCが導くAI駆動開発の新フェーズ
masahiro_okamura
0
140
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
Rustから学ぶ 非同期処理の仕組み
skanehira
1
150
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
670
Create Ruby native extension gem with Go
sue445
0
130
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Site-Speed That Sticks
csswizardry
10
820
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Embracing the Ebb and Flow
colly
87
4.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Music & Morning Musume
bryan
46
6.8k
Automating Front-end Workflow
addyosmani
1370
200k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
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 完